使用 OpenCV、scikit-image 和Python检测低对比度图像
在本文中,我们将了解如何使用 OpenCV 检测低对比度图像,使用Python的 scikit-image
低对比度图像在明暗部分之间的区别很小,因此很难分辨物体的边界从哪里开始,场景的背景从哪里开始。例如
左边是低对比度的,右边是高对比度的图像。使用低对比度图像检测,您可以以编程方式检测不足以满足您的图像处理管道的图像。
首先让我们看看如何使用直方图手动查看图片的对比度。高对比度图像(右)的直方图跨越了整个动态范围,但低对比度图像(左)的直方图只覆盖了一个狭窄的范围,如下所示。
现在让我们使用 scikit-image 库的 is_low_contrast 方法以编程方式进行。
方法:
- 导入所有需要的库。
- 以灰度模式读取图像。
- 使用提供的某个阈值检查图像是低对比度图像还是高对比度图像。
Syntax: is_low_contrast(img,”threshold value”)
示例 1:低对比度图像
输入图像:
代码:
Python3
import cv2
from skimage.exposure import is_low_contrast
img = cv2.imread("low_contrast_img(1).jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
if(is_low_contrast(gray,0.35)):
cv2.putText(img, "low contrast image", (5, 25),
cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0,0,0), 2)
else:
cv2.putText(img, "high contrast image", (5, 25),
cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0,0,0), 2)
cv2.imshow("output",img)
cv2.imwrite("output.jpg",img)
cv2.waitKey(0)
# closing all open windows
cv2.destroyAllWindows()
Python3
import cv2
from skimage.exposure import is_low_contrast
img = cv2.imread("high contrast image(2).jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
if(is_low_contrast(gray,0.35)):
cv2.putText(img, "low contrast image", (5, 25),
cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0,0,0), 2)
else:
cv2.putText(img, "high contrast image", (5, 25),
cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0,0,0), 2)
cv2.imshow("output",img)
cv2.imwrite("output.jpg",img)
cv2.waitKey(0)
# closing all open windows
cv2.destroyAllWindows()
输出:
示例 2:高对比度图像
输入:
代码:
Python3
import cv2
from skimage.exposure import is_low_contrast
img = cv2.imread("high contrast image(2).jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
if(is_low_contrast(gray,0.35)):
cv2.putText(img, "low contrast image", (5, 25),
cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0,0,0), 2)
else:
cv2.putText(img, "high contrast image", (5, 25),
cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0,0,0), 2)
cv2.imshow("output",img)
cv2.imwrite("output.jpg",img)
cv2.waitKey(0)
# closing all open windows
cv2.destroyAllWindows()
输出:
您可以进一步在高对比度图像上找到轮廓以进行图像预处理并从图像中提取对象。