当我尝试在Sobel blu中使用64F时,python中的OpenCV会抱怨

2024-10-02 00:33:08 发布

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

我试图使一个物体检测工具(给定一个样本)使用轮廓。你知道吗

我已经取得了一些进展,但是当物体在另一个具有复杂结构的物体(例如手或脸)前面时,或者物体和它的背景颜色合并时,它停止检测边缘,因此不能给出一个好的轮廓。你知道吗

在阅读了算法文档之后,我发现它的工作原理是通过颜色强度的差异来检测边缘——例如,如果对象是黑色的,而背景是黑色的,则不会检测到它。你知道吗

所以现在我试着应用一些效果和模糊来让它工作。你知道吗

我目前正在尝试得到一个组合索贝尔模糊(在两个轴),希望给予足够的光线,它将界定边缘-因为该产品将用于手机谁有闪光灯。你知道吗

所以当我试着去做的时候:

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,但这并没有解决问题,然后它就根本不起作用了。你知道吗


Tags: 颜色错误模式cv2framecv边缘物体
1条回答
网友
1楼 · 发布于 2024-10-02 00:33:08

原因是findContours函数需要一个类型为8位整数(uint8)的二进制图像(图像由0和1组成)。开发人员可能这样做是为了减少内存使用,因为用64位而不是8位存储二进制值是没有意义的。只需使用

frame = np.uint8(frame)

相关问题 更多 >

    热门问题