使用findContours()
函数时,我得到一个数组。我对数组中的数字意味着什么以及“ dtype”是什么感到困惑。
代码:
contour = str(cv2.findContours(edges, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE))
print(contour)
输出:
([array([[[21, 21]],
[[21, 90]],
[[90, 90]],
[[90, 21]]], dtype=int32), array([[[21, 22]],
[[22, 21]],
[[89, 21]],
[[90, 22]],
[[90, 89]],
[[89, 90]],
[[22, 90]],
[[21, 89]]], dtype=int32), array([[[23, 23]],
[[23, 88]],
[[88, 88]],
[[88, 23]]], dtype=int32), array([[[23, 24]],
[[24, 23]],
[[87, 23]],
[[88, 24]],
[[88, 87]],
[[87, 88]],
[[24, 88]],
[[23, 87]]], dtype=int32)], array([[[-1, -1, 1, -1],
[-1, -1, 2, 0],
[-1, -1, 3, 1],
[-1, -1, -1, 2]]], dtype=int32))
我将如何解析此数组以供以后使用?我计划开发一个从应用程序读取包含图像数据的文件的乌龟应用程序。我想知道如何将其转换为上述说明。
答案 0 :(得分:1)
cv2.findConturs()
cnt,heirarchy = cv2.findContours(edged_img,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) # Finding contours detection
此方法返回两个值。轮廓和层次结构。轮廓是图像中所有轮廓的Python列表。每个轮廓都是对象边界点的(x,y)坐标的Numpy数组。
在您的情况下,它返回相同的两个值,但是不同之处在于,您将其解析为字符串,并将其放入单个变量中,这使它很难理解。( 阅读修复部分 )
Dtype
每个ndarray都有一个关联的数据类型(dtype)对象。此数据类型对象(dtype)通知我们ab
列出数组的布局。这意味着它为我们提供了有关以下信息:
在您的情况下,这表明ndarray中的数据与数组维一起为int类型
修正代码
在您的代码中,问题出在这部分:
contour = str(cv2.findContours(edges, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE))
在这种情况下,您正在将findCountours返回的值解析为str类型。
cnt,heirarchy = cv2.findContours(edged_img,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) # Finding contours detection
编辑::
用于绘图
如果要绘制所有检测到的轮廓,则必须使用cv2.drawContours()
方法。
cv2.drawContours(image,contours,-1,(255,0,0),2) # Drawing the detected contours on the image.
它接受5
个值。它的第一个参数是源图像,第二个参数是应该作为Python列表传递的轮廓,第三个参数是轮廓的索引(在绘制单个轮廓时有用。要绘制所有轮廓,请传递-1),其余参数颜色,厚度等。
如果您想查看一个Python程序而不是一个图像并在其上绘制轮廓的信息,则可以检查此开放源代码。
https://github.com/0xPrateek/ComputerVision-OpenCV3-Python/blob/master/contours%20detection.py