我正在尝试将图像裁剪到轮廓的边界。我从这个答案中找到了一个代码
mask = np.zeros_like(image)
cv2.drawContours(mask, [c], -1, 255, -1)
out = np.zeros_like(image)
out[mask == 255] = image[mask == 255]
(y, x) = np.where(mask == 255)
(topy, topx) = (np.min(y), np.min(x))
(bottomy, bottomx) = (np.max(y), np.max(x))
out = out[topy: bottomy + 1, topx:bottomx + 1]
crop_img = image[topy: bottomy + 1, topx:bottomx + 1]
cv2.imshow("croppedd", crop_img)
c
轮廓在哪里。
我收到如下错误:
Traceback (most recent call last):
File "detect_shapes.py", line 66, in <module>
(y, x) = np.where(mask == 255)
ValueError: too many values to unpack (expected 2)
我该如何解决我的问题?
我认为这与我的形象无关,但这里是我的形象。
您上面所指的答案是grayscale
使用
image = cv2.imread('...', 0)
这里0
指的是cv2.IMREAD_GRAYSCALE
标志。这很重要,因为在这种情况下,image
将只有一个1
通道。如果您以这种方式加载图像并运行代码,它将可以正常工作。我已经测试过了 在这种情况下,(y, x) = np.where(mask == 255)
不会输出任何错误,因为输出np.where(mask == 255)
是两个numpy数组的元组,因为它mask
是一个2d
数组(请使用进行检查mask.shape
)。
但是,如果要加载你的形象image = cv2.imread('...')
,而不是做这样的事情image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
,将其转换为灰度,那么在这种情况下,np.where(mask == 255)
返回三个numpy的阵列的一个元组的mask
是3d
这里数组这就是为什么您收到上述错误的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句