【发布时间】:2026-02-17 23:30:01
【问题描述】:
我在寻找白色背景上黑色物体的轮廓时遇到了问题。
在这里我添加了一个图像示例。 现在我需要找到黑色区域的中心,我使用以下代码。
im = cv2.imread(img)
plt.imshow(im)
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(im, 60, 255, cv2.THRESH_BINARY_INV)
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
但是它给出了一个类似
的错误TypeError: Expected Ptr for argument 'image'" 用于 cv2.findeContours() 的图像参数。
我该如何解决这个问题?或者如果您有任何其他想法如何找到我想听的黑色区域的中心。谢谢。
【问题讨论】:
-
使用
thresh = cv2.threshold(im, 60, 255, cv2.THRESH_BINARY_INV)[1],参见。threshold的返回值。 -
对不起,这是我第一次使用 Opencv,你是什么意思 cf。阈值的返回值?
-
但是你知道,return statements 通常是什么?当调用
cv2.threshold(...)并将结果转发到单个变量thresh时,这将是一个由retval和dst组成的元组。当调用cv2.threshold(...)[1]时,你只会得到dst,从而转发到thresh,你的thresh是实际的阈值图像。 -
谢谢我明白你的意思,它有点解决了与阈值相关的错误,谢谢。但 cv2.findContours() 出现新错误“错误:OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\contours.cpp:197: error: (-210:Unsupported格式或格式组合)[开始]FindContours 在模式时仅支持 CV_8UC1 图像!= CV_RETR_FLOODFILL 否则仅在函数 'cvStartFindContours_Impl' 中支持 CV_32SC1 图像“据我所知,我应该更改图像的模式吗?
-
你的原图是三通道图像,所以
thresh也是三通道,cv2.findContours(...)不支持。例如,使用thresh = cv2.threshold(gray, ...)而不是thresh = cv2.threshold(im, ...)。 (以前没有注意到...)
标签: python image opencv image-processing computer-vision