首页 >后端开发 >Python教程 >CV什么是图像?,让我们调整图像的亮度和对比度

CV什么是图像?,让我们调整图像的亮度和对比度

Linda Hamilton
Linda Hamilton原创
2024-12-03 11:21:14984浏览

在 Python 中的 CV2 上下文中,当您读取图像时,它会存储为 Y 和 X 坐标的 2D 或 3D 数组,其中 uint8 值指示图像的颜色和亮度。术语 uint8 是指范围从 0 到 255 的 8 位无符号整数数据类型。它与红、绿和蓝 (RGB) 的 3 个通道相结合,形成彩色图像。

为什么这种结构很重要

如果您开始像普通数组一样更改图像的某些部分(例如,将其除以 3),您可能会丢失这种格式。例如,像素值可能超出 0 到 255 的范围,导致图像无法使用。理解这种结构对于正确操作图像至关重要。

查看 CV2 中的图像

在 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()

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

上面的代码将打开一个弹出窗口,在您的计算机上显示图像。请随意添加一个 url 到您自己的图像中进行测试。 然后,您可以放大以观察图像的像素级 RGB 值。这个基本功能是探索图像处理的一个很好的起点。

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

亮度和对比度

什么是亮度和对比度?

  • 亮度是指图像的整体亮度或暗度,由像素强度决定。
  • 对比度是指像素之间的强度与参考值(例如平均像素强度)相比的差异。它本质上是衡量图像中变化的“锐利”或“独特”程度。

从数学上讲,可以使用以下公式调整亮度和对比度:

new_image=对比度×图像亮度

在 CV2 中应用亮度和对比度

OpenCV 中的 cv2.convertScaleAbs() 函数自动执行此过程。它应用上面的公式,同时确保像素值保持在 0 到 255 的范围内。

工作原理如下:

  • alpha(对比度):缩放因子,通常在 0.0 到 3.0 之间。
  • beta(亮度):偏移值,通常在 -100 到 100 之间

用法示例:
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()

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

使用回调创建交互式调整

虽然一次性调整很有用,但大多数时候,我们希望交互式地调整亮度和对比度。 OpenCV 允许我们使用轨迹栏来实现这一点。

Trackbars 可以使用 cv2.createTrackbar() 创建,这让我们可以动态调整值。一般语法是:
cv2.createTrackbar(trackbarname, winname, value, count, onChange_function)

  • trackbarname:轨迹栏的名称。
  • winname:将显示轨迹栏的 OpenCV 窗口的名称。
  • 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()

CVWhat is an Image?, Lets adjust the Brightness and Contrast of an image

调整对比度和亮度滑块会触发 on_change 函数,该函数使用 cv2.getTrackbarPos() 从轨迹栏读取值。然后使用 cv2.convertScaleAbs 函数将这些值应用于图像,并实时显示更新的图像。

为了使应用程序更加用户友好,我在末尾添加了一个简单的代码片段,以允许用户通过按 x 键退出。这解决了 OpenCV 的一个常见问题,即关闭窗口并不总是会阻止代码运行。通过实现这一点,应用程序可确保干净退出,而不会出现延迟进程。

以上是CV什么是图像?,让我们调整图像的亮度和对比度的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn