gpt4 book ai didi

python - 当我尝试在Sobel模糊中使用64F时,Python中的OpenCV提示

转载 作者:行者123 更新时间:2023-12-02 16:48:19 25 4
gpt4 key购买 nike

我正在尝试使用Contours做一个物体检测工具(给出一个样本)。

我取得了一些进展,但是当对象位于结构复杂的另一个对象(例如手或脸)之前,或者该对象及其背景以彩色合并时,它将停止检测边缘,因此无法提供良好的效果轮廓。

阅读算法文档后,我发现它的工作原理是通过颜色强度的差异来检测边缘-例如,如果对象为黑色,而背景为黑色,则将无法检测到边缘。

因此,现在我尝试应用一些效果和模糊效果以使其正常工作。

我目前正在尝试(在两个轴上)使Sobel模糊结合在一起,希望在足够的光线下可以定义边缘-因为该产品将被具有闪光灯的手机使用。

因此,当我尝试这样做时:

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)

我收到一个错误消息,说该模式不是 cv2.findContours时, CV_8UC1仅支持 CV_RETR_FLOODFILL图像。

这是触发错误的行:
counturs, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

我仅在1周前才开始处理该问题,我惊讶地发现获得结果如此容易,但是有些错误消息却很荒谬。

编辑:我确实尝试过将模式转换为 CV_RETR_FLOODFILL,但是那不能解决问题,那么它根本没有用。

最佳答案

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

frame = np.uint8(frame)

关于python - 当我尝试在Sobel模糊中使用64F时,Python中的OpenCV提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com