Image Processing เบื้องต้นสำหรับเด็ก ด้วย Python

การปรับปรุงภาพคือกระบวนการปรับปรุงคุณภาพและลักษณะของภาพ สามารถใช้เพื่อแก้ไขข้อบกพร่องหรือจุดบกพร่องในภาพ หรือเพียงแค่ทำให้ภาพดูน่าสนใจยิ่งขึ้น เทคนิคการปรับปรุงภาพสามารถนำไปใช้กับภาพได้หลากหลายประเภท รวมถึงภาพถ่าย ภาพสแกน และภาพดิจิทัล เป้าหมายทั่วไปของการปรับปรุงภาพ ได้แก่ การเพิ่มความคมชัด ความสว่าง และความสดใสของสี การลดสัญญาณรบกวนและความเบลอ และการแก้ไขความบิดเบี้ยวและข้อบกพร่องอื่นๆ เทคนิคการปรับปรุงภาพสามารถทำได้ด้วยตนเองโดยใช้ซอฟต์แวร์แก้ไขภาพ หรือโดยอัตโนมัติโดยใช้อัลกอริทึมและโปรแกรมคอมพิวเตอร์ เช่น 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()

ผลลัพธ์:

ความสว่างและความคมชัด - Geeksforgeeks
ความสว่างและความคมชัด


ในตัวอย่างนี้ ความสว่างของภาพถูกปรับโดยการเพิ่มค่า 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()

ผลลัพธ์:

ความสว่างและความคมชัด - Geeksforgeeks
ความสว่างและความคมชัด


ในตัวอย่างนี้ ความสว่างและความคมชัดถูกปรับโดยใช้การปรับขนาดและการเลื่อนค่าพิกเซลร่วมกัน คุณสามารถปรับค่าอัลฟาและเบต้าเพื่อให้ได้ระดับความสว่างและความคมชัดที่ต้องการได้

การเพิ่มความคมชัดของภาพ

การเพิ่มความคมชัดคือกระบวนการเพิ่มความชัดเจนของขอบและรายละเอียดเล็กๆ ในภาพ เพื่อให้ภาพดูคมชัดและคมชัดยิ่งขึ้น การเพิ่มความคมชัดมีความสำคัญเพราะช่วยเน้นรายละเอียดและลักษณะต่างๆ ในภาพ ทำให้ภาพดูน่าสนใจและเข้าใจง่ายขึ้น การเพิ่มความคมชัดสามารถใช้เพื่อแก้ไขความเบลอหรือความไม่คมชัดในภาพ และสามารถใช้เทคนิคต่างๆ ในการปรับใช้ได้

วิธีหนึ่งที่นิยมใช้ในการเพิ่มความคมชัดของภาพโดยใช้ 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()

ผลลัพธ์ :

การลับคม - Geeksforgeeks
การลับคม


ในตัวอย่างนี้ ใช้เคอร์เนลเพิ่มความคมชัดขนาด 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()

ผลลัพธ์ :

การลับคมมีดลาปลาเซียน - Geeksforgeeks
การลับคมแบบลาปลาเซียน


ในตัวอย่างนี้ ตัวดำเนินการ 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()

ผลลัพธ์:

Median Blur - Geeksforgeeks
การเบลอค่ามัธยฐาน


ในตัวอย่างนี้ ฟังก์ชัน 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()

ผลลัพธ์ :

Gaussian Blur -Geeksforgeeks
การเบลอแบบเกาส์เซียน


ในตัวอย่างนี้ ฟังก์ชัน 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()

ผลลัพธ์ :

รูปภาพที่ปรับขนาดแล้ว - Geeksforgeeks
ภาพที่ปรับขนาดแล้ว


ในตัวอย่างนี้ ภาพถูกปรับขนาดให้มีความกว้าง 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()

ผลลัพธ์:

รูปภาพที่ปรับขนาดแล้ว - Geeksforgeeks
ภาพที่ปรับขนาดแล้ว


ในตัวอย่างนี้ ภาพถูกปรับขนาดด้วยตัวคูณ 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()

ผลลัพธ์:

สีกลับด้าน - Geeksforgeeks
สีตรงข้าม

การปรับสมดุลฮิสโตแกรม –

การปรับสมดุลฮิสโตแกรมเป็นเทคนิคที่ใช้ในการปรับความคมชัดของภาพโดยการกระจายค่าความเข้มของพิกเซลในภาพ เทคนิคนี้มีความสำคัญเพราะสามารถปรับปรุงความคมชัดและความสว่างของภาพ ทำให้มองเห็นรายละเอียดและคุณลักษณะต่างๆ ได้ง่ายขึ้น ซึ่งอาจมองเห็นได้ยากในภาพที่มีความคมชัดต่ำ มีวิธีการปรับสมดุลฮิสโตแกรมหลายวิธี รวมถึงการปรับสมดุลฮิสโตแกรมแบบทั่วทั้งภาพและการปรับสมดุลฮิสโตแกรมแบบเฉพาะจุด การปรับสมดุลฮิสโตแกรมแบบทั่วทั้งภาพจะปรับความคมชัดของภาพทั้งหมด ในขณะที่การปรับสมดุลฮิสโตแกรมแบบเฉพาะจุดจะปรับความคมชัดในบริเวณเล็กๆ เฉพาะส่วนของภาพ
คุณสามารถใช้ฟังก์ชัน 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()

ผลลัพธ์:

Equalized-Geeksforgeeks
ปรับสมดุล


ในตัวอย่างนี้ ขั้นแรกจะโหลดภาพจากไฟล์โดยใช้ฟังก์ชัน 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", ตัวแปรที่เก็บรูปภาพ)

ส่วนประกอบของคำสั่ง:

  1. ชื่อไฟล์: ต้องใส่ในเครื่องหมายคำพูด " " และต้องมีนามสกุลไฟล์ด้วย (เช่น .jpg, .png)
  2. ตัวแปรเก็บรูป: คือชื่อตัวแปรที่เราดึงมาจากกล้อง หรือรูปที่เราแต่งเสร็จแล้วนั่นเอง

📸 ตัวอย่างการใช้งานจริง

ลองดูโค้ดนี้ครับ เป็นการเปิดกล้องขึ้นมา แล้วถ้าเรากดปุ่ม ‘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 มีลำดับขั้นตอนเหมือนการถ่ายหนังครับ:

  1. เปิดกล้อง (Start Camera): บอกคอมพิวเตอร์ว่าขอใช้กล้องตัวที่เท่าไหร่
  2. อ่านเฟรม (Read Frame): ดึงภาพนิ่งออกมาทีละภาพอย่างรวดเร็ว (วิดีโอคือภาพนิ่งหลายๆ ภาพรันต่อกัน)
  3. ประมวลผล (Process): นำภาพที่ได้มาแต่งสี ใส่ฟิลเตอร์ หรือตรวจจับวัตถุ
  4. แสดงผล (Show): เปิดหน้าต่างขึ้นมาให้เราเห็นภาพ
  5. บันทึก (Save): ถ้าเราพอใจ ให้สั่งบันทึกลงเครื่อง
  6. คืนกล้อง (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() # ปิดหน้าต่างโชว์ภาพทั้งหมด

🔍 คำอธิบายส่วนสำคัญในการประมวลผล

  1. cv2.VideoCapture(0): หากน้องๆ มีกล้องหลายตัว (เช่น กล้องต่อแยก) อาจลองเปลี่ยนจาก 0 เป็น 1 หรือ 2 ดูครับ
  2. cv2.flip(frame, 1): ปกติกล้องจะแสดงภาพสลับซ้ายขวา การใช้ flip จะทำให้เรารู้สึกเหมือนส่องกระจกจริงๆ ทำให้ใช้งานง่ายขึ้น
  3. cv2.imwrite(name, image): นี่คือหัวใจของการเซฟรูปครับ ถ้าเราอยากเปลี่ยนคุณภาพภาพ ให้เปลี่ยนจาก .png เป็น .jpg ได้เลย
  4. 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()

🔍 อธิบายส่วนที่เพิ่มเข้ามา

  1. cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY):
    • frame: คือรูปภาพสีต้นฉบับที่กล้องส่งมา
    • cv2.COLOR_BGR2GRAY: คือรหัสคำสั่งบอก OpenCV ว่า “ช่วยเปลี่ยนจากระบบสี BGR (Blue-Green-Red) ให้เป็น GRAY (เทา) ทีนะ”
  2. เงื่อนไข elif key == ord('b')::
    • เราใช้ elif (ย่อมาจาก Else If) เพื่อบอกคอมพิวเตอร์ว่า “ถ้าไม่ได้กด s แต่ไปกด b ให้ทำตามนี้แทนนะ”
    • เมื่อกด b ปุ๊บ คอมพิวเตอร์จะเอาภาพปัจจุบันไปเข้าคาถาขาวดำก่อน แล้วจึงค่อยใช้คำสั่ง imwrite บันทึกลงเครื่องครับ
  3. ระบบชื่อไฟล์:
    • พี่ตั้งชื่อให้ต่างกันระหว่าง 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/