如何在Python中使用opencv绘制轮廓?

时间:2018-02-23 13:16:22

标签: python numpy opencv image-processing computer-vision

我有以下图片预处理:

enter image description here

现在我想使用 private void updateAndroidSecurityProvider() { try { ProviderInstaller.installIfNeeded(this); } catch (Exception e) { e.getMessage(); } } 方法从图像中查找单元格,然后使用compile 'com.google.android.gms:play-services-auth:11.8.0' 按顺序为图像中的每个单元格绘制轮廓。我这样做但没有显示任何内容。

findContours

我收到以下错误。

  

轮廓不是一个numpy数组,也不是标量

另一个答案对我没有帮助。

我也使用以下解决方案。

drawContours

但是这个解决方案并没有在给定的图像上绘制任何东西。

2 个答案:

答案 0 :(得分:2)

更新,OpenCV 4.0更改cv2.findContours。所以我修改了代码示例。还有一个更通用的方法:

cnts, hiers  = cv2.findContours(...)[:-2]

cv2.findContours返回一个元组,而不仅仅是轮廓。你可以这样做:

## Find contours
if cv2.__version__.startswith("3."):
    _, contours, _ = cv2.findContours(bimg.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
else:
    contours, _ = cv2.findContours(bimg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

## Draw contours 
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)

相关的类似问题:

(1)Python Opencv drawContour error

(2)How to use `cv2.findContours` in different OpenCV versions?

答案 1 :(得分:1)

cv2.findContours返回的元组的格式为(im, contours, hierarchy),其中im是带有可视化轮廓的图像,contours是两个numpy数组的元组,格式为{{1} 1}}和(x_values, y_values)取决于检索模式。由于您使用的是CV_RETR_EXTERNAL,heirarchy并没有多大意义。