灰度图像的范围阈值化

2024-05-17 12:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

OpenCVcv.InRange函数是否仅对RGB图像有效?我能用这个函数对灰度图像进行阈值化吗?

我发现一个错误,下面是我的代码:

   import cv2
   image=cv2.imread("disparitySGB.jpg")
   thresh=cv2.inRange(image,190,255);

它给出以下错误:

thresh=cv2.inRange(image,190,255); TypeError: unknown is not a numpy array

我试着修复它:

  thresh=cv2.inRange(image,numpy.array(190),numpy.array(255));

现在没有错误,但它会产生黑色图像。


Tags: 函数代码图像imagenumpy错误阈值rgb
3条回答

对于形状(M,N)为numpy,大小为MxN且OpenCV中只有一个通道的灰度图像,cv2.inRange采用标量边界:

gray = cv2.imread(filename, cv2.CV_LOAD_IMAGE_GRAYSCALE)
gray_filtered = cv2.inRange(gray, 190, 255)

但是对于在numpy中具有形状(M,N,3)和在OpenCV中具有三个通道的大小MxN的RGB图像,您需要使边界与“通道大小”匹配。

rgb = cv2.imread(filename, cv2.CV_LOAD_IMAGE_COLOR)
rgb_filtered = cv2.inRange(gray, (190, 190, 190), (255, 255, 255))

这在documentation中有解释,尽管不是很清楚。

cv2.inRange(src, lowerb, upperb[, dst]) → dst

src作为数组,将lowerupper作为arrayscalar,这意味着您可以使用它来阈值灰度图像。你只需要用scalars来表示upperlower

示例:

myResult = cv2.InRange(myGrayscale, 50, 100)

你只需要把numpy作为np导入,你的原始代码就可以正常工作了。

相关问题 更多 >