我试图使一个物体检测工具(给定一个样本)使用轮廓。你知道吗
我已经取得了一些进展,但是当物体在另一个具有复杂结构的物体(例如手或脸)前面时,或者物体和它的背景颜色合并时,它停止检测边缘,因此不能给出一个好的轮廓。你知道吗
在阅读了算法文档之后,我发现它的工作原理是通过颜色强度的差异来检测边缘——例如,如果对象是黑色的,而背景是黑色的,则不会检测到它。你知道吗
所以现在我试着应用一些效果和模糊来让它工作。你知道吗
我目前正在尝试得到一个组合索贝尔模糊(在两个轴),希望给予足够的光线,它将界定边缘-因为该产品将用于手机谁有闪光灯。你知道吗
所以当我试着去做的时候:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frame = cv2.GaussianBlur(frame, (5, 5), 10)
frameX = cv2.Sobel(frame, cv2.CV_64F, 1, 0)
frameY = cv2.Sobel(frame, cv2.CV_64F, 0, 1)
frame = cv2.bitwise_or(frameX, frameY)
我得到一个错误,当模式不是CV_RETR_FLOODFILL
时,cv2.findContours
只支持CV_8UC1
图像。你知道吗
以下是触发错误的行:
counturs, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
我一周前才开始胡闹这个东西,我很惊讶它是多么容易得到结果,但一些错误信息是可笑的。你知道吗
编辑:我确实尝试将模式切换为CV_RETR_FLOODFILL
,但这并没有解决问题,然后它就根本不起作用了。你知道吗
原因是
findContours
函数需要一个类型为8位整数(uint8)的二进制图像(图像由0和1组成)。开发人员可能这样做是为了减少内存使用,因为用64位而不是8位存储二进制值是没有意义的。只需使用相关问题 更多 >
编程相关推荐