การปรับปรุงภาพคือกระบวนการปรับปรุงคุณภาพและลักษณะของภาพ สามารถใช้เพื่อแก้ไขข้อบกพร่องหรือจุดบกพร่องในภาพ หรือเพียงแค่ทำให้ภาพดูน่าสนใจยิ่งขึ้น เทคนิคการปรับปรุงภาพสามารถนำไปใช้กับภาพได้หลากหลายประเภท รวมถึงภาพถ่าย ภาพสแกน และภาพดิจิทัล เป้าหมายทั่วไปของการปรับปรุงภาพ ได้แก่ การเพิ่มความคมชัด ความสว่าง และความสดใสของสี การลดสัญญาณรบกวนและความเบลอ และการแก้ไขความบิดเบี้ยวและข้อบกพร่องอื่นๆ เทคนิคการปรับปรุงภาพสามารถทำได้ด้วยตนเองโดยใช้ซอฟต์แวร์แก้ไขภาพ หรือโดยอัตโนมัติโดยใช้อัลกอริทึมและโปรแกรมคอมพิวเตอร์ เช่น OpenCV
ในบทความนี้ เราจะสำรวจเทคนิคการปรับปรุงภาพต่างๆ ที่สามารถทำได้โดยใช้ OpenCV และ Python OpenCV เป็นไลบรารีคอมพิวเตอร์วิชั่นแบบโอเพนซอร์สที่มีประสิทธิภาพ ซึ่งมีอัลกอริทึมการประมวลผลภาพและคอมพิวเตอร์วิชั่นมากมาย การรวมความสามารถของ OpenCV เข้ากับความอเนกประสงค์ของ Python ทำให้เราสามารถนำเทคนิคการปรับปรุงภาพต่างๆ มาใช้เพื่อปรับปรุงคุณภาพและลักษณะของภาพได้อย่างง่ายดาย
ในส่วนต่อไปนี้ เราจะกล่าวถึงเทคนิคการปรับปรุงภาพต่างๆ และวิธีการนำไปใช้โดยใช้ OpenCV และ Python มีเทคนิคการปรับปรุงภาพหลายอย่างที่คุณสามารถใช้กับ OpenCV และ Python เพื่อเพิ่มคุณภาพและความคมชัดของภาพ ต่อไปนี้เป็นตัวอย่างบางส่วน:
การปรับความสว่างและความคมชัด
การปรับความสว่างและความคมชัดของภาพสามารถส่งผลต่อความสวยงามและประสิทธิภาพของภาพได้อย่างมาก นอกจากนี้ยังช่วยแก้ไขข้อบกพร่องหรือจุดบกพร่องในภาพ และทำให้มองเห็นรายละเอียดได้ง่ายขึ้น การหาจุดสมดุลที่เหมาะสมระหว่างความสว่างและความคมชัดเป็นสิ่งสำคัญในการสร้างภาพที่สวยงามและมีประสิทธิภาพ
มีหลายวิธีในการปรับความสว่างและความคมชัดของภาพโดยใช้ OpenCV และ Python วิธีที่นิยมใช้กันวิธีหนึ่งคือการใช้ฟังก์ชัน cv2.addWeighted() ซึ่งช่วยให้คุณปรับความสว่างได้โดยการเพิ่มค่าสเกลาร์ให้กับแต่ละพิกเซลในภาพ และปรับความคมชัดโดยการปรับขนาดค่าพิกเซล ต่อ
ไปนี้เป็นตัวอย่างวิธีการปรับความสว่างและความคมชัดของภาพโดยใช้ฟังก์ชัน cv2.addWeighted():
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Adjust the brightness and contrast
# Adjusts the brightness by adding 10 to each pixel value
brightness = 10
# Adjusts the contrast by scaling the pixel values by 2.3
contrast = 2.3
image2 = cv2.addWeighted(image, contrast, np.zeros(image.shape, image.dtype), 0, brightness)
#Save the image
cv2.imwrite('modified_image.jpg', image2)
#Plot the contrast image
plt.subplot(1, 2, 2)
plt.title("Brightness & contrast")
plt.imshow(image2)
plt.show()
ผลลัพธ์:

ในตัวอย่างนี้ ความสว่างของภาพถูกปรับโดยการเพิ่มค่า 10 ให้กับค่าพิกเซลแต่ละค่า และความคมชัดถูกปรับโดยการปรับขนาดค่าพิกเซลด้วย 2.3 คุณสามารถปรับค่าความสว่างและความคมชัดเพื่อให้ได้ระดับความสว่างและความคมชัดที่ต้องการได้
อีกวิธีหนึ่งในการปรับความสว่างและความคมชัดของภาพคือการใช้ฟังก์ชัน cv2.convertScaleAbs() ซึ่งช่วยให้คุณปรับความสว่างและความคมชัดโดยใช้การปรับขนาดและการเลื่อนค่าพิกเซลร่วมกัน
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Adjust the brightness and contrast
# g(i,j)=α⋅f(i,j)+β
# control Contrast by 1.5
alpha = 1.5
# control brightness by 50
beta = 50
image2 = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)
#Save the image
cv2.imwrite('Brightness & contrast.jpg', image2)
#Plot the contrast image
plt.subplot(1, 2, 2)
plt.title("Brightness & contrast")
plt.imshow(image2)
plt.show()
ผลลัพธ์:

ในตัวอย่างนี้ ความสว่างและความคมชัดถูกปรับโดยใช้การปรับขนาดและการเลื่อนค่าพิกเซลร่วมกัน คุณสามารถปรับค่าอัลฟาและเบต้าเพื่อให้ได้ระดับความสว่างและความคมชัดที่ต้องการได้
การเพิ่มความคมชัดของภาพ
การเพิ่มความคมชัดคือกระบวนการเพิ่มความชัดเจนของขอบและรายละเอียดเล็กๆ ในภาพ เพื่อให้ภาพดูคมชัดและคมชัดยิ่งขึ้น การเพิ่มความคมชัดมีความสำคัญเพราะช่วยเน้นรายละเอียดและลักษณะต่างๆ ในภาพ ทำให้ภาพดูน่าสนใจและเข้าใจง่ายขึ้น การเพิ่มความคมชัดสามารถใช้เพื่อแก้ไขความเบลอหรือความไม่คมชัดในภาพ และสามารถใช้เทคนิคต่างๆ ในการปรับใช้ได้
วิธีหนึ่งที่นิยมใช้ในการเพิ่มความคมชัดของภาพโดยใช้ OpenCV และ Python คือการใช้ฟังก์ชัน cv2.filter2D() ซึ่งจะนำภาพไปทำการคอนโวลูชันกับเคอร์เนล เคอร์เนลสามารถออกแบบมาเพื่อเพิ่มความคมชัดของขอบภาพ ทำให้ได้ภาพที่คมชัดขึ้น
ต่อไปนี้เป็นตัวอย่างวิธีการเพิ่มความคมชัดของภาพโดยใช้ฟังก์ชัน cv2.filter2D():
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Create the sharpening kernel
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
# Sharpen the image
sharpened_image = cv2.filter2D(image, -1, kernel)
#Save the image
cv2.imwrite('sharpened_image.jpg', sharpened_image)
#Plot the sharpened image
plt.subplot(1, 2, 2)
plt.title("Sharpening")
plt.imshow(sharpened_image)
plt.show()
ผลลัพธ์ :

ในตัวอย่างนี้ ใช้เคอร์เนลเพิ่มความคมชัดขนาด 3×3 เพื่อเพิ่มความคมชัดของขอบภาพ คุณสามารถทดลองใช้เคอร์เนลขนาดต่างๆ เพื่อให้ได้ระดับความคมชัดที่ต้องการ เราใช้ NumPy ในการสร้างเคอร์เนลเพิ่มความคมชัด โดยสร้างเป็นอาร์เรย์ NumPy โดยใช้ฟังก์ชัน np.array() จากนั้นส่งอาร์เรย์นี้เป็นอาร์กิวเมนต์ไปยังฟังก์ชัน cv2.filter2D() ซึ่งจะทำการคอนโวลูชันภาพกับเคอร์เนลเพื่อเพิ่มความคมชัด
อีกวิธีหนึ่งในการเพิ่มความคมชัดของภาพคือการใช้ฟังก์ชัน cv2.Laplacian() ซึ่งจะคำนวณค่า Laplacian ของภาพและส่งคืนผลลัพธ์เป็นภาพที่คมชัดขึ้น
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Sharpen the image using the Laplacian operator
sharpened_image2 = cv2.Laplacian(image, cv2.CV_64F)
#Save the image
cv2.imwrite('Laplacian sharpened_image.jpg', sharpened_image2)
#Plot the sharpened image
plt.subplot(1, 2, 2)
plt.title("Laplacian Sharpening")
plt.imshow(sharpened_image2)
plt.show()
ผลลัพธ์ :

ในตัวอย่างนี้ ตัวดำเนินการ Laplacian จะคำนวณภาพที่คมชัดขึ้น คุณสามารถปรับความลึกของภาพที่ได้โดยใช้พารามิเตอร์ cv2.CV_64F
การกำจัดสัญญาณรบกวนออกจากภาพ
การลดสัญญาณรบกวนคือกระบวนการกำจัดหรือลดสัญญาณรบกวนหรือสิ่งแปลกปลอมที่ไม่ต้องการออกจากภาพ การลดสัญญาณรบกวนมีความสำคัญเพราะสามารถปรับปรุงคุณภาพและความคมชัดของภาพ และทำให้วิเคราะห์หรือประมวลผลด้วยอัลกอริธึมคอมพิวเตอร์ได้ง่ายขึ้น สัญญาณรบกวนอาจเกิดขึ้นในภาพเนื่องจากหลายปัจจัยและสามารถลดคุณภาพของภาพได้ มีเทคนิคหลายอย่างในการลดสัญญาณรบกวน รวมถึงการใช้ตัวกรอง เช่น ตัวกรองค่ามัธยฐานหรือตัวกรองเกาส์เซียน สิ่งสำคัญคือต้องใช้การลดสัญญาณรบกวนอย่างรอบคอบเพื่อหลีกเลี่ยงภาพเบลอหรือการสูญเสียรายละเอียดในภาพ
วิธีหนึ่งที่นิยมใช้ในการกำจัดสัญญาณรบกวนออกจากภาพโดยใช้ OpenCV และ Python คือการใช้ตัวกรองค่ามัธยฐาน ตัวกรองค่ามัธยฐานทำงานโดยการแทนที่พิกเซลแต่ละพิกเซลในภาพด้วยค่ามัธยฐานของกลุ่มพิกเซลข้างเคียง ซึ่งจะช่วยลดสัญญาณรบกวนและลดสิ่งผิดปกติในภาพได้
ต่อไปนี้เป็นตัวอย่างวิธีการลบสัญญาณรบกวนออกจากภาพโดยใช้ฟังก์ชัน cv2.medianBlur() ใน OpenCV:
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Remove noise using a median filter
filtered_image = cv2.medianBlur(image, 11)
#Save the image
cv2.imwrite('Median Blur.jpg', filtered_image)
#Plot the blured image
plt.subplot(1, 2, 2)
plt.title("Median Blur")
plt.imshow(filtered_image)
plt.show()
ผลลัพธ์:

ในตัวอย่างนี้ ฟังก์ชัน cv2.medianBlur() ถูกใช้เพื่อใช้ตัวกรองค่ามัธยฐานกับภาพ พารามิเตอร์ 5 ระบุขนาดของเคอร์เนลที่จะใช้สำหรับตัวกรอง คุณสามารถปรับขนาดเคอร์เนลเพื่อให้ได้ระดับการลดสัญญาณรบกวนที่ต้องการ
อีกวิธีหนึ่งในการลดสัญญาณรบกวนในภาพคือการใช้ตัวกรองแบบเกาส์เซียน ซึ่งใช้ค่าเฉลี่ยถ่วงน้ำหนักของพิกเซลข้างเคียงเพื่อลดสัญญาณรบกวนและลดสิ่งผิดปกติ คุณสามารถใช้ฟังก์ชัน cv2.GaussianBlur() เพื่อใช้ตัวกรองแบบเกาส์เซียนกับภาพใน OpenCV ได้
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Remove noise using a Gaussian filter
filtered_image2 = cv2.GaussianBlur(image, (7, 7), 0)
#Save the image
cv2.imwrite('Gaussian Blur.jpg', filtered_image2)
#Plot the blured image
plt.subplot(1, 2, 2)
plt.title("Gaussian Blur")
plt.imshow(filtered_image2)
plt.show()
ผลลัพธ์ :

ในตัวอย่างนี้ ฟังก์ชัน cv2.GaussianBlur() ถูกใช้เพื่อใช้ตัวกรอง Gaussian กับภาพ พารามิเตอร์ (5, 5) ระบุขนาดของเคอร์เนลที่จะใช้สำหรับตัวกรอง และพารามิเตอร์ 0 ระบุค่าเบี่ยงเบนมาตรฐานของฟังก์ชัน Gaussian คุณสามารถปรับพารามิเตอร์เหล่านี้เพื่อให้ได้ระดับการลดสัญญาณรบกวนที่ต้องการ
การเพิ่มสีสันในภาพ
การปรับปรุงสีคือการปรับสีในภาพให้สดใส สมดุล หรือเป็นธรรมชาติมากขึ้น สามารถใช้เพื่อแก้ไขข้อบกพร่องหรือปัญหาด้านสีในภาพ หรือเพื่อทำให้ภาพดูน่าสนใจและสวยงามยิ่งขึ้น การปรับปรุงสีมีความสำคัญเพราะสามารถส่งผลกระทบอย่างมากต่อผลกระทบทางสายตาและประสิทธิภาพของภาพ นอกจากนี้ยังสามารถใช้แก้ไขข้อผิดพลาดหรือปัญหาด้านสีในภาพ และทำให้มองเห็นรายละเอียดและคุณลักษณะต่างๆ ในภาพได้ง่ายขึ้น มีเทคนิคหลายอย่างในการปรับปรุงสีในภาพ รวมถึงการปรับสมดุลสี การปรับความอิ่มตัว และการปรับเฉดสี
มีหลายวิธีในการปรับปรุงสีในภาพโดยใช้ OpenCV และ Python วิธีที่นิยมใช้กันวิธีหนึ่งคือการใช้ฟังก์ชัน cv2.cvtColor() ซึ่งช่วยให้คุณแปลงภาพจากพื้นที่สีหนึ่งไปยังอีกพื้นที่สีหนึ่งได้ วิธีนี้มีประโยชน์สำหรับการปรับสมดุลสีหรือความอิ่มตัวของภาพ
นี่คือตัวอย่างวิธีการปรับปรุงสีในภาพโดยใช้ฟังก์ชัน cv2.cvtColor():
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Convert the image from BGR to HSV color space
image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
# Adjust the hue, saturation, and value of the image
# Adjusts the hue by multiplying it by 0.7
image[:, :, 0] = image[:, :, 0] * 0.7
# Adjusts the saturation by multiplying it by 1.5
image[:, :, 1] = image[:, :, 1] * 1.5
# Adjusts the value by multiplying it by 0.5
image[:, :, 2] = image[:, :, 2] * 0.5
# Convert the image back to BGR color space
image2 = cv2.cvtColor(image, cv2.COLOR_HSV2BGR)
#Save the image
cv2.imwrite('enhanced coloured.jpg', image2)
#Plot the enhanced image
plt.subplot(1, 2, 2)
plt.title("enhanced coloured")
plt.imshow(image2)
plt.show()
ผลลัพธ์ :

โค้ดนี้จะแปลงภาพจากระบบสี BGR ไปเป็นระบบสี HSV โดยใช้ฟังก์ชัน cv2.cvtColor() ก่อน จากนั้นจะปรับค่าเฉดสี ความอิ่มตัว และความสว่างของภาพโดยการคูณค่าในแต่ละช่องสีด้วยค่าสเกลาร์ สุดท้ายจะแปลงภาพกลับไปเป็นระบบสี BGR และบันทึกภาพที่แก้ไขแล้ว คุณสามารถปรับค่าสเกลาร์เพื่อปรับแต่งสีให้ได้ระดับที่ต้องการได้
การปรับขนาดและย่อขยายภาพ
การปรับขนาดและย่อส่วนภาพเกี่ยวข้องกับการปรับมิติและขนาดของภาพ ทั้งสองอย่างมีความสำคัญต่อการตอบสนองความต้องการหรือบริบทเฉพาะ เช่น การปรับให้พอดีกับขนาดหรืออัตราส่วนภาพที่กำหนด หรือการลดขนาดไฟล์ มีเทคนิคหลายอย่าง รวมถึงวิธีการประมาณค่าแบบต่างๆ เช่น การประมาณค่าแบบเพื่อนบ้านที่ใกล้ที่สุด การประมาณค่าแบบสองมิติเชิงเส้น และการประมาณค่าแบบลูกบาศก์สองมิติ สิ่งสำคัญคือต้องเลือกวิธีการที่รักษาคุณภาพและความคมชัดของภาพไว้ได้
คุณสามารถใช้ฟังก์ชัน cv2.resize() ใน OpenCV เพื่อปรับขนาดและย่อ/ขยายภาพได้ ฟังก์ชัน cv2.resize() รับอาร์กิวเมนต์ดังต่อไปนี้:
- แหล่งที่มา: รูปภาพต้นฉบับ
- dsize: ขนาดของภาพเอาต์พุต ระบุเป็นทูเปิล (ความกว้าง ความสูง)
- fx: ตัวคูณมาตราส่วนตามแกน x
- fy: ตัวคูณมาตราส่วนตามแกน y
- การประมาณค่าในช่วง: วิธีการประมาณค่าในช่วงที่จะใช้
ต่อไปนี้เป็นตัวอย่างวิธีการใช้ฟังก์ชัน cv2.resize() เพื่อปรับขนาดรูปภาพ:
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Resize the image to a specific width and height
resized_image = cv2.resize(image, (2100, 1500))
#Save the Resized image
cv2.imwrite('Resized image.jpg', resized_image)
#Plot the Resized image
plt.subplot(1, 2, 2)
plt.title("Resized")
plt.imshow(resized_image)
plt.show()
ผลลัพธ์ :

ในตัวอย่างนี้ ภาพถูกปรับขนาดให้มีความกว้าง 400 พิกเซลและความสูง 300 พิกเซล
คุณยังสามารถใช้พารามิเตอร์ fx และ fy เพื่อระบุปัจจัยการปรับขนาดตามแกน x และแกน y ตามลำดับได้อีกด้วย ตัวอย่างเช่น:
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Scale the image by a factor of 2 along both axes
scaled_image = cv2.resize(image, None, fx=2, fy=2)
#Save the image
cv2.imwrite('Scaled.jpg', scaled_image)
#Plot the Scaled image
plt.subplot(1, 2, 2)
plt.title("Scaled")
plt.imshow(scaled_image)
plt.show()
ผลลัพธ์:

ในตัวอย่างนี้ ภาพถูกปรับขนาดด้วยตัวคูณ 2 ตามแกนทั้งสอง ทำให้ได้ภาพที่มีขนาดใหญ่เป็นสองเท่าของภาพต้นฉบับ พารามิเตอร์การประมาณค่าช่วยให้คุณระบุวิธีการประมาณค่าที่จะใช้เมื่อปรับขนาดหรือย่อส่วนภาพ ตัวเลือกที่มีให้เลือก ได้แก่ cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_CUBIC และอื่นๆ
นี่เป็นเพียงตัวอย่างพื้นฐานของการปรับขนาดและย่อส่วนภาพโดยใช้ OpenCV และ Python คุณสามารถปรับขนาดและตัวคูณการย่อส่วนเพื่อให้ได้ผลลัพธ์ที่ต้องการ และคุณยังสามารถระบุวิธีการประมาณค่าที่จะใช้เมื่อปรับขนาดหรือย่อส่วนภาพได้อีกด้วย
การแปลงผกผัน
เราสามารถกลับสีได้โดยการลบค่าแต่ละค่าออกจาก 255
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Inverse by subtracting from 255
inverse_image = 255 - image
#Save the image
cv2.imwrite('inverse_image.jpg', inverse_image)
#Plot the Inverse image
plt.subplot(1, 2, 2)
plt.title("Inverse color")
plt.imshow(inverse_image)
plt.show()
ผลลัพธ์:

การปรับสมดุลฮิสโตแกรม –
การปรับสมดุลฮิสโตแกรมเป็นเทคนิคที่ใช้ในการปรับความคมชัดของภาพโดยการกระจายค่าความเข้มของพิกเซลในภาพ เทคนิคนี้มีความสำคัญเพราะสามารถปรับปรุงความคมชัดและความสว่างของภาพ ทำให้มองเห็นรายละเอียดและคุณลักษณะต่างๆ ได้ง่ายขึ้น ซึ่งอาจมองเห็นได้ยากในภาพที่มีความคมชัดต่ำ มีวิธีการปรับสมดุลฮิสโตแกรมหลายวิธี รวมถึงการปรับสมดุลฮิสโตแกรมแบบทั่วทั้งภาพและการปรับสมดุลฮิสโตแกรมแบบเฉพาะจุด การปรับสมดุลฮิสโตแกรมแบบทั่วทั้งภาพจะปรับความคมชัดของภาพทั้งหมด ในขณะที่การปรับสมดุลฮิสโตแกรมแบบเฉพาะจุดจะปรับความคมชัดในบริเวณเล็กๆ เฉพาะส่วนของภาพ
คุณสามารถใช้ฟังก์ชัน cv2.equalizeHist() ใน OpenCV เพื่อปรับสมดุลฮิสโตแกรมของภาพได้ ฟังก์ชันนี้รับข้อมูลภาพเป็นอาร์กิวเมนต์และส่งคืนข้อมูลภาพที่ปรับสมดุลแล้ว นี่คือตัวอย่างวิธีการใช้ฟังก์ชัน cv2.equalizeHist() เพื่อปรับสมดุลฮิสโตแกรมของภาพ:
#Import the necessary libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Load the image
image = cv2.imread('GFG.jpeg')
#Plot the original image
plt.subplot(1, 2, 1)
plt.title("Original")
plt.imshow(image)
# Convert the image to grayscale
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Equalize the histogram
equalized_image = cv2.equalizeHist(gray_image)
#Save the equalized image
cv2.imwrite('equalized.jpg', equalized_image)
#Plot the equalized image
plt.subplot(1, 2, 2)
plt.title("equalized")
plt.imshow(equalized_image)
plt.show()
ผลลัพธ์:

ในตัวอย่างนี้ ขั้นแรกจะโหลดภาพจากไฟล์โดยใช้ฟังก์ชัน cv2.imread() จากนั้นจะแปลงภาพเป็นภาพขาวดำโดยใช้ฟังก์ชัน cv2.cvtColor() ต่อมาจะเรียกใช้ฟังก์ชัน cv2.equalizeHist() โดยส่งข้อมูลภาพขาวดำเป็นอาร์กิวเมนต์ ข้อมูลภาพที่ปรับสมดุลแล้วจะถูกเก็บไว้ในตัวแปร equalized_image สุดท้าย ภาพที่แก้ไขแล้วจะถูกบันทึกไปยังไฟล์โดยใช้ฟังก์ชัน cv2.imwrite()
โปรดทราบว่าฟังก์ชัน cv2.equalizeHist() ใช้ได้เฉพาะกับภาพขาวดำเท่านั้น หากคุณต้องการปรับสมดุลฮิสโตแกรมของภาพสี คุณจะต้องแปลงภาพเป็นพื้นที่สีที่แยกค่าความเข้ม (เช่น พื้นที่สี YCrCb) และใช้การปรับสมดุลฮิสโตแกรมกับช่องความเข้ม จากนั้นคุณสามารถแปลงภาพกลับไปยังพื้นที่สีเดิมได้หากต้องการ
เทคนิคอื่นๆ
การปรับปรุงภาพเป็นสาขาที่กว้างขวางซึ่งเกี่ยวข้องกับการปรับแต่งภาพเพื่อปรับปรุงคุณภาพของภาพหรือเพื่อให้เหมาะสมกับการวิเคราะห์เพิ่มเติม มีเทคนิคมากมายสำหรับการปรับปรุงภาพ เช่น:
- การแปลงทางสัณฐานวิทยา (Morphological transformations ): เหล่านี้คือการดำเนินการที่อิงตามรูปร่างของภาพ โดยทั่วไปจะใช้กับภาพไบนารี แต่ก็สามารถใช้กับภาพระดับสีเทาได้เช่นกัน ตัวอย่างเช่น การขยาย (dilation), การกัดเซาะ (erosion), การเปิด (opening), การปิด (closing) เป็นต้น การดำเนินการเหล่านี้สามารถใช้เพื่อปรับปรุงหรือแก้ไขรูปร่างหรือโครงสร้างของวัตถุในภาพได้ ในการใช้การดำเนินการทางสัณฐานวิทยาด้วย OpenCV และ Python คุณสามารถใช้ฟังก์ชันต่างๆ เช่น erode, dilate และ morphologyEx ได้
- การตรวจจับขอบ : OpenCV มีฟังก์ชันหลายอย่างสำหรับการตรวจจับขอบ เช่น Canny(), Sobel() และ Laplacian() ฟังก์ชันเหล่านี้สามารถใช้ระบุขอบในภาพได้โดยการมองหาการเปลี่ยนแปลงอย่างรวดเร็วของความเข้มของพิกเซล
- การปรับแก้สี : OpenCV มีฟังก์ชันหลายอย่างสำหรับปรับสีในภาพ เช่น cvtColor() และ inRange() ฟังก์ชันเหล่านี้สามารถใช้เพื่อทำงานต่างๆ เช่น การปรับสมดุลสี การไล่ระดับสี และการปรับสมดุลสีขาว
- การไล่ระดับสีของภาพ : OpenCV มีฟังก์ชันหลายอย่างสำหรับการคำนวณการไล่ระดับสีของภาพ เช่น Scharr(), Sobel() และ Laplacian() ฟังก์ชันเหล่านี้สามารถใช้เพื่อเน้นการเปลี่ยนแปลงความเข้มของพิกเซลในภาพ และมีประโยชน์สำหรับงานต่างๆ เช่น การตรวจจับขอบและการแบ่งส่วนภาพ
- การครอบตัดภาพ : เทคนิคการครอบตัดสามารถใช้เพื่อลบส่วนที่ไม่ต้องการออกจากภาพได้ ในการครอบตัดภาพ คุณสามารถใช้ฟังก์ชัน copyMakeBorder เพื่อสร้างภาพใหม่ที่มีขนาดตามต้องการ จากนั้นคัดลอกส่วนที่เกี่ยวข้องจากภาพต้นฉบับไปยังภาพใหม่
- การหมุนภาพ : เทคนิคการหมุนสามารถใช้เพื่อเปลี่ยนทิศทางของภาพได้ ในการหมุนภาพด้วย OpenCV คุณสามารถใช้ฟังก์ชัน warpAffine ร่วมกับเมทริกซ์การหมุนได้
- การผสมภาพ : เทคนิคการผสมภาพสามารถใช้เพื่อรวมภาพสองภาพขึ้นไปเข้าด้วยกัน ในการผสมภาพด้วย OpenCV และ Python คุณสามารถใช้ฟังก์ชัน addWeighted เพื่อรวมภาพโดยใช้ค่าเฉลี่ยถ่วงน้ำหนักได้
- การกำหนดค่าเกณฑ์ภาพ : เทคนิคการกำหนดค่าเกณฑ์สามารถใช้แปลงภาพให้เป็นขาวดำได้โดยการกำหนดค่าเกณฑ์สำหรับความเข้มของพิกเซล ในการใช้การกำหนดค่าเกณฑ์ คุณสามารถใช้ฟังก์ชันเกณฑ์ได้
- การลดความเบลอของภาพ : เทคนิคการลดความเบลอสามารถใช้เพื่อลบความเบลอจากภาพที่เกิดจากการสั่นของกล้อง วัตถุที่อยู่นอกโฟกัส หรือปัจจัยอื่นๆ ในการลดความเบลอของภาพ คุณสามารถใช้ฟังก์ชัน Wiener ซึ่งจะใช้ฟิลเตอร์ Wiener กับภาพได้
OpenCV เป็นไลบรารีที่มีประสิทธิภาพสำหรับการประมวลผลภาพและงานด้านคอมพิวเตอร์วิชั่น และมีเทคนิคการปรับปรุงภาพขั้นสูงมากมายที่สามารถนำไปใช้ในแอปพลิเคชันต่างๆ ได้ เทคนิคเหล่านี้บางส่วนได้แก่:
- การเพิ่มความละเอียดสูงพิเศษ : OpenCV มีฟังก์ชัน pyrUp() และ pyrDown() สำหรับการเพิ่มความละเอียดและลดความละเอียดของภาพตามลำดับ ฟังก์ชันเหล่านี้สามารถใช้เป็นส่วนหนึ่งของอัลกอริธึมการเพิ่มความละเอียดสูงพิเศษเพื่อเพิ่มความละเอียดของภาพได้
- การปรับปรุงภาพ : OpenCV มีฟังก์ชันหลายอย่างสำหรับการปรับปรุงภาพ เช่น fastNlMeansDenoising() และ fastNlMeansDenoisingColored() ฟังก์ชันเหล่านี้สามารถใช้เพื่อกำจัดสัญญาณรบกวนและปรับปรุงคุณภาพของภาพได้
- การรวมภาพ : OpenCV มีฟังก์ชัน addWeighted() สำหรับรวมภาพสองภาพโดยใช้ผลรวมถ่วงน้ำหนัก ฟังก์ชันนี้สามารถใช้เพื่อรวมภาพหลายภาพของฉากเดียวกันเพื่อสร้างภาพเดียวที่มีข้อมูลมากขึ้นหรือมีคุณภาพสูงขึ้น
- การแบ่งส่วนภาพ : OpenCV มีฟังก์ชันหลายอย่างสำหรับการแบ่งส่วนภาพ รวมถึง threshold(), adaptiveThreshold() และ findContours() ฟังก์ชันเหล่านี้สามารถใช้แบ่งภาพออกเป็นส่วนๆ หรือบริเวณต่างๆ ที่สอดคล้องกับวัตถุหรือพื้นที่ที่สนใจได้
- การจดจำภาพ : OpenCV มีฟังก์ชันหลายอย่างสำหรับการจดจำภาพ รวมถึง HOGDescriptor() และ SIFT() ฟังก์ชันเหล่านี้สามารถใช้เพื่อดึงคุณลักษณะจากภาพและฝึกโมเดลการเรียนรู้ของเครื่องเพื่อจดจำวัตถุหรือฉากได้
- การตรวจจับวัตถุ : OpenCV มีฟังก์ชันหลายอย่างสำหรับการตรวจจับวัตถุ รวมถึง HOGDescriptor() และ SIFT() ฟังก์ชันเหล่านี้สามารถใช้ในการตรวจจับและระบุตำแหน่งของวัตถุในภาพหรือวิดีโอแบบเรียลไทม์ได้
- การลงทะเบียนภาพ : OpenCV มีฟังก์ชัน registerTranslation() สำหรับจัดเรียงหรือลงทะเบียนภาพสองภาพขึ้นไปของฉากเดียวกัน ฟังก์ชันนี้สามารถใช้เพื่อจัดเรียงภาพจากเซ็นเซอร์ที่แตกต่างกันหรือจากมุมมองที่แตกต่างกันได้
- การต่อภาพ : เทคนิคการต่อภาพสามารถใช้เพื่อรวมภาพหลายภาพเข้าด้วยกันเป็นภาพพาโนรามาหรือภาพโมเสกภาพเดียว ในการใช้ OpenCV และ Python เพื่อต่อภาพ คุณสามารถใช้เทคนิคต่างๆ เช่น การจับคู่คุณลักษณะ ซึ่งจะจับคู่คุณลักษณะในภาพต้นฉบับเพื่อสร้างกรอบอ้างอิงร่วม และการบิดเบี้ยวภาพ ซึ่งจะบิดเบี้ยวภาพเพื่อให้ตรงกับกรอบอ้างอิง
เพื่อให้การใช้เทคนิคการปรับปรุงภาพโดยใช้ OpenCV และ Python มีประสิทธิภาพ จำเป็นต้องเลือกเทคนิคที่เหมาะสมกับภาพและผลลัพธ์ที่ต้องการ ทดลองกับพารามิเตอร์ต่างๆ ระมัดระวังเมื่อเพิ่มความคมชัดของภาพ ใช้สีอย่างเหมาะสม และพิจารณาใช้เทคนิคการประมวลผลภาพอื่นๆ ตามความจำเป็น สำหรับการอ่านเพิ่มเติมและแหล่งข้อมูลเกี่ยวกับการปรับปรุงภาพโดยใช้ OpenCV และ Python โปรดพิจารณาศึกษาเอกสารและบทเรียนของ OpenCV รวมถึงแหล่งข้อมูลออนไลน์ เช่น บล็อกและบทเรียนของ PyImageSearch และหลักสูตร Python Machine Learning with OpenCV
โดยสรุปแล้ว การปรับปรุงภาพเป็นเทคนิคสำคัญที่ใช้ในการปรับปรุงคุณภาพของภาพในหลากหลายสาขา เช่น การแพทย์ หุ่นยนต์ ความปลอดภัย การถ่ายภาพ การสำรวจระยะไกล และการผลิต OpenCV เป็นไลบรารีโอเพนซอร์สที่ทรงพลังซึ่งมีเทคนิคการปรับปรุงภาพมากมายให้ใช้ใน Python ด้วยการใช้ OpenCV นักพัฒนาสามารถนำเทคนิคการปรับปรุงภาพไปใช้ในแอปพลิเคชันของตนได้อย่างง่ายดายเพื่อปรับปรุงคุณภาพของภาพและดึงข้อมูลที่มีค่าจากภาพเหล่านั้น ไม่ว่าคุณจะเป็นนักวิจัย นักพัฒนา หรือผู้เชี่ยวชาญที่ทำงานในสาขาที่ต้องใช้ภาพ OpenCV และ Python ก็มีเครื่องมือที่ยืดหยุ่นและทรงพลังสำหรับการปรับปรุงคุณภาพของภาพของคุณ
💾 คำสั่งหลัก: cv2.imwrite()
คำสั่งนี้ทำหน้าที่เหมือนปุ่ม “บันทึก” ในโปรแกรมวาดรูป โดยมีโครงสร้างการเขียนดังนี้:
Python
cv2.imwrite("ชื่อไฟล์ที่ต้องการ.jpg", ตัวแปรที่เก็บรูปภาพ)
ส่วนประกอบของคำสั่ง:
- ชื่อไฟล์: ต้องใส่ในเครื่องหมายคำพูด
" "และต้องมีนามสกุลไฟล์ด้วย (เช่น.jpg,.png) - ตัวแปรเก็บรูป: คือชื่อตัวแปรที่เราดึงมาจากกล้อง หรือรูปที่เราแต่งเสร็จแล้วนั่นเอง
📸 ตัวอย่างการใช้งานจริง
ลองดูโค้ดนี้ครับ เป็นการเปิดกล้องขึ้นมา แล้วถ้าเรากดปุ่ม ‘s’ บนคีย์บอร์ด คอมพิวเตอร์จะเซฟรูปให้ทันที!
Python
import cv2
# 1. เปิดกล้อง
cap = cv2.VideoCapture(0)
print("วิธีใช้งาน: กด 's' เพื่อเซฟรูป หรือกด 'q' เพื่อปิดโปรแกรม")
while True:
ret, frame = cap.read() # อ่านภาพจากกล้องมาเก็บไว้ในตัวแปร frame
cv2.imshow("Camera", frame) # โชว์ภาพสดๆ
key = cv2.waitKey(1)
# 2. ถ้ากดปุ่ม 's' ให้ทำการ Save รูป
if key == ord('s'):
# คำสั่งเซฟรูปชื่อ 'my_capture.png' โดยเอาภาพมาจากตัวแปร frame
cv2.imwrite("my_capture.png", frame)
print("เย้! บันทึกรูปภาพสำเร็จแล้วในชื่อ my_capture.png")
# 3. ถ้ากดปุ่ม 'q' ให้เลิกทำงาน
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
💡 เทคนิคเพิ่มเติมสำหรับนักโปรแกรมเมอร์น้อย
- เปลี่ยนนามสกุลได้: น้องๆ สามารถบันทึกเป็น
.jpg(ไฟล์ขนาดเล็ก) หรือ.png(ไฟล์คุณภาพสูง) ก็ได้ แค่เปลี่ยนชื่อในคำสั่งครับ - ตั้งชื่อไฟล์ตามเวลา: ถ้าเราเซฟชื่อเดิมซ้ำๆ รูปเก่าจะถูกรูปใหม่เขียนทับหายไป! นักโปรแกรมเมอร์มักจะใช้การใส่ตัวเลขหรือเวลาเข้าไปในชื่อไฟล์เพื่อให้ได้รูปหลายๆ ใบครับ
Workshop ทำโปรเจกต์ “กล้องถ่ายรูปอัจฉริยะ” ด้วย Python น้องๆ จะต้องเตรียมเครื่องมือและเขียนโค้ดตามขั้นตอนแบบละเอียดดังนี้ครับ
🛠️ ขั้นตอนที่ 1: การติดตั้ง Library (Package) ที่จำเป็น
ก่อนจะเขียนโค้ด เราต้องติดตั้ง “ชุดเครื่องมือ” ลงในเครื่องคอมพิวเตอร์ก่อน โดยเปิด Terminal ใน VS Code แล้วพิมพ์คำสั่งนี้:
Bash
pip install opencv-python numpy
- opencv-python: คือ Library หลักที่ใช้จัดการเรื่องภาพและวิดีโอ (เปรียบเหมือนดวงตาของคอมพิวเตอร์)
- numpy: คือ Library ที่ช่วยจัดการเรื่องตัวเลขและพิกเซล (เปรียบเหมือนสมองที่ใช้คำนวณ)
📸 ขั้นตอนที่ 2: โครงสร้างการทำงานของ Webcam
การทำงานกับ Webcam ใน Python มีลำดับขั้นตอนเหมือนการถ่ายหนังครับ:
- เปิดกล้อง (Start Camera): บอกคอมพิวเตอร์ว่าขอใช้กล้องตัวที่เท่าไหร่
- อ่านเฟรม (Read Frame): ดึงภาพนิ่งออกมาทีละภาพอย่างรวดเร็ว (วิดีโอคือภาพนิ่งหลายๆ ภาพรันต่อกัน)
- ประมวลผล (Process): นำภาพที่ได้มาแต่งสี ใส่ฟิลเตอร์ หรือตรวจจับวัตถุ
- แสดงผล (Show): เปิดหน้าต่างขึ้นมาให้เราเห็นภาพ
- บันทึก (Save): ถ้าเราพอใจ ให้สั่งบันทึกลงเครื่อง
- คืนกล้อง (Release): เมื่อเลิกใช้ ต้องสั่งปิดกล้องเพื่อให้โปรแกรมอื่นใช้งานต่อได้
💻 ขั้นตอนที่ 3: เขียนโค้ดประมวลผลและบันทึกภาพ (ฉบับละเอียด)
ก๊อปปี้โค้ดด้านล่างนี้ไปวางในไฟล์ชื่อ my_camera.py แล้วรันดูได้เลยครับ!
Python
import cv2 # นำเครื่องมือ OpenCV มาใช้งาน
# 1. เชื่อมต่อกับ Webcam (เลข 0 คือกล้องตัวหลักของโน้ตบุ๊ก)
cap = cv2.VideoCapture(0)
# ตรวจสอบว่ากล้องเปิดได้ไหม
if not cap.isOpened():
print("ไม่พบกล้อง! กรุณาตรวจสอบการเชื่อมต่อ")
exit()
print("--- โปรแกรมเริ่มทำงาน ---")
print("กด 's' เพื่อเซฟรูป")
print("กด 'q' เพื่อออกจากโปรแกรม")
img_counter = 0 # ตัวนับจำนวนรูป เพื่อไม่ให้เซฟชื่อซ้ำกัน
while True:
# 2. อ่านภาพจากกล้อง (ret จะเป็น True ถ้าอ่านสำเร็จ, frame คือตัวเก็บรูปภาพ)
ret, frame = cap.read()
if not ret:
print("อ่านข้อมูลจากกล้องไม่ได้")
break
# 3. ประมวลผลภาพ (ตัวอย่าง: ลองกลับด้านภาพเหมือนส่องกระจก)
processed_frame = cv2.flip(frame, 1)
# 4. แสดงผลหน้าต่างวิดีโอ
cv2.imshow("My Magic Camera", processed_frame)
# 5. รอรับคำสั่งจากคีย์บอร์ด (รอ 1 มิลลิวินาทีในแต่ละรอบ)
key = cv2.waitKey(1)
# --- การบันทึกภาพ (Save) ---
if key == ord('s'):
# ตั้งชื่อไฟล์ให้ไม่ซ้ำ เช่น saved_img_0.png, saved_img_1.png
img_name = f"saved_img_{img_counter}.png"
# ใช้คำสั่ง imwrite ในการเซฟรูป
cv2.imwrite(img_name, processed_frame)
print(f"บันทึกรูป {img_name} สำเร็จ!")
img_counter += 1 # เพิ่มตัวเลขเพื่อเตรียมเซฟรูปถัดไป
# --- การออกจากโปรแกรม (Quit) ---
elif key == ord('q'):
print("กำลังปิดโปรแกรม...")
break
# 6. คืนทรัพยากรให้ระบบ (สำคัญมาก!)
cap.release() # ปิดการเชื่อมต่อกล้อง
cv2.destroyAllWindows() # ปิดหน้าต่างโชว์ภาพทั้งหมด
🔍 คำอธิบายส่วนสำคัญในการประมวลผล
cv2.VideoCapture(0): หากน้องๆ มีกล้องหลายตัว (เช่น กล้องต่อแยก) อาจลองเปลี่ยนจาก0เป็น1หรือ2ดูครับcv2.flip(frame, 1): ปกติกล้องจะแสดงภาพสลับซ้ายขวา การใช้flipจะทำให้เรารู้สึกเหมือนส่องกระจกจริงๆ ทำให้ใช้งานง่ายขึ้นcv2.imwrite(name, image): นี่คือหัวใจของการเซฟรูปครับ ถ้าเราอยากเปลี่ยนคุณภาพภาพ ให้เปลี่ยนจาก.pngเป็น.jpgได้เลยcv2.waitKey(1): ถ้าเราใส่เลขเยอะขึ้น วิดีโอจะดูหน่วงและช้าลง เลข1คือความเร็วที่เหมาะสมที่สุดสำหรับภาพสดครับ
💡 ท้าทายความสามารถ (Challenge)
ลองเพิ่มโค้ดในบรรทัดประมวลผล ให้ภาพที่โชว์และบันทึกเป็น “ภาพขาวดำ” ดูสิครับ! (คำใบ้: ใช้คำสั่ง cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY))
เฉลย: เลือกบันทึกได้ทั้งภาพสีและขาวดำ
ลองนำโค้ดนี้ไปรันดูนะครับ พี่ได้เพิ่มส่วนการประมวลผลสีและเงื่อนไขการกดปุ่มไว้ให้แล้ว:
Python
import cv2
# 1. เริ่มต้นเปิดกล้อง
cap = cv2.VideoCapture(0)
print("--- เครื่องถ่ายรูปอัจฉริยะ ---")
print("กด 's' เพื่อบันทึกภาพสี (Normal)")
print("กด 'b' เพื่อบันทึกภาพขาวดำ (Black & White)")
print("กด 'q' เพื่อปิดโปรแกรม")
img_counter = 0
while True:
ret, frame = cap.read()
if not ret:
break
# ปรับภาพให้เหมือนส่องกระจก (ซ้ายไปขวา)
frame = cv2.flip(frame, 1)
# แสดงภาพวิดีโอสด (เป็นภาพสีปกติเพื่อให้เราจัดท่าทางได้ง่าย)
cv2.imshow("Smart Camera", frame)
key = cv2.waitKey(1)
# --- เงื่อนไขที่ 1: กด 's' บันทึกภาพสีปกติ ---
if key == ord('s'):
file_name = f"color_photo_{img_counter}.png"
cv2.imwrite(file_name, frame)
print(f"บันทึกภาพสี: {file_name}")
img_counter += 1
# --- เงื่อนไขที่ 2: กด 'b' บันทึกภาพขาวดำ ---
elif key == ord('b'):
# คาถาเปลี่ยนภาพสี (BGR) ให้เป็นสีเทา (GRAY)
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
file_name = f"bw_photo_{img_counter}.png"
cv2.imwrite(file_name, gray_frame)
print(f"บันทึกภาพขาวดำ: {file_name}")
img_counter += 1
# --- เงื่อนไขที่ 3: กด 'q' เพื่อเลิกทำงาน ---
elif key == ord('q'):
break
# คืนเครื่องมือให้ระบบ
cap.release()
cv2.destroyAllWindows()
🔍 อธิบายส่วนที่เพิ่มเข้ามา
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY):frame: คือรูปภาพสีต้นฉบับที่กล้องส่งมาcv2.COLOR_BGR2GRAY: คือรหัสคำสั่งบอก OpenCV ว่า “ช่วยเปลี่ยนจากระบบสี BGR (Blue-Green-Red) ให้เป็น GRAY (เทา) ทีนะ”
- เงื่อนไข
elif key == ord('b')::- เราใช้
elif(ย่อมาจาก Else If) เพื่อบอกคอมพิวเตอร์ว่า “ถ้าไม่ได้กด s แต่ไปกด b ให้ทำตามนี้แทนนะ” - เมื่อกด b ปุ๊บ คอมพิวเตอร์จะเอาภาพปัจจุบันไปเข้าคาถาขาวดำก่อน แล้วจึงค่อยใช้คำสั่ง
imwriteบันทึกลงเครื่องครับ
- เราใช้
- ระบบชื่อไฟล์:
- พี่ตั้งชื่อให้ต่างกันระหว่าง
color_photo_กับbw_photo_เพื่อให้น้องๆ กลับไปดูในโฟลเดอร์แล้วแยกออกว่าใบไหนคือภาพสี ใบไหนคือขาวดำครับ
- พี่ตั้งชื่อให้ต่างกันระหว่าง
🌟 ท้าทายต่อไป (Super Challenge!)
ถ้าอยากให้ภาพขาวดำที่เซฟออกมา “สว่างขึ้น” ด้วย น้องๆ ลองเอาคำสั่ง cv2.add(gray_frame, 50) มาใช้ร่วมกับตอนกดปุ่ม ‘b’ ดูสิครับ
LInk:https://www.geeksforgeeks.org/machine-learning/image-enhancement-techniques-using-opencv-python/
