在 Python 中的 CV2 上下文中,当您读取图像时,它会存储为 Y 和 X 坐标的 2D 或 3D 数组,其中 uint8 值指示图像的颜色和亮度。术语 uint8 是指范围从 0 到 255 的 8 位无符号整数数据类型。它与红、绿和蓝 (RGB) 的 3 个通道相结合,形成彩色图像。
如果您开始像普通数组一样更改图像的某些部分(例如,将其除以 3),您可能会丢失这种格式。例如,像素值可能超出 0 到 255 的范围,导致图像无法使用。理解这种结构对于正确操作图像至关重要。
在 CV2 Python 库中,您可以使用以下代码片段轻松查看图像:
#pip install opencv-python # if not already installed import cv2 # Load an image image = cv2.imread('./test.png') # Display the image in a window cv2.imshow('Image', image) cv2.waitKey(0) cv2.destroyAllWindows()
上面的代码将打开一个弹出窗口,在您的计算机上显示图像。请随意添加一个 url 到您自己的图像中进行测试。 然后,您可以放大以观察图像的像素级 RGB 值。这个基本功能是探索图像处理的一个很好的起点。
从数学上讲,可以使用以下公式调整亮度和对比度:
new_image=对比度×图像亮度
OpenCV 中的 cv2.convertScaleAbs() 函数自动执行此过程。它应用上面的公式,同时确保像素值保持在 0 到 255 的范围内。
工作原理如下:
用法示例:
new_image = cv2.convertScaleAbs(图像, alpha=对比度, beta=亮度)
这使我们能够轻松修改亮度和对比度,而无需手动剪切像素值。
image = cv2.imread('./test.png') cv2.namedWindow('Adjustments') contrast=0.8 brightness=89 image=cv2.convertScaleAbs(image, alpha=contrast, beta=brightness) cv2.imshow('Adjustments', image) cv2.waitKey(0) cv2.destroyAllWindows()
虽然一次性调整很有用,但大多数时候,我们希望交互式地调整亮度和对比度。 OpenCV 允许我们使用轨迹栏来实现这一点。
Trackbars 可以使用 cv2.createTrackbar() 创建,这让我们可以动态调整值。一般语法是:
cv2.createTrackbar(trackbarname, winname, value, count, onChange_function)
然后可以在 onChange_function 中调用这些轨迹栏;
cv2.getTrackbarPos(trackbarname, winname)
・trackbarname:轨迹栏的名称
・ winname:将显示轨迹栏的 OpenCV 窗口的名称。
要调整亮度和对比度,我们需要两个轨迹栏。
#pip install opencv-python # if not already installed import cv2 # Load an image image = cv2.imread('./test.png') # Display the image in a window cv2.imshow('Image', image) cv2.waitKey(0) cv2.destroyAllWindows()
调整对比度和亮度滑块会触发 on_change 函数,该函数使用 cv2.getTrackbarPos() 从轨迹栏读取值。然后使用 cv2.convertScaleAbs 函数将这些值应用于图像,并实时显示更新的图像。
为了使应用程序更加用户友好,我在末尾添加了一个简单的代码片段,以允许用户通过按 x 键退出。这解决了 OpenCV 的一个常见问题,即关闭窗口并不总是会阻止代码运行。通过实现这一点,应用程序可确保干净退出,而不会出现延迟进程。
以上是CV什么是图像?,让我们调整图像的亮度和对比度的详细内容。更多信息请关注PHP中文网其他相关文章!