相关疑难解决方法(0)

cv2.drawContours将不会绘制填充轮廓

我正在尝试使用cv2.drawContoursOpenCV中的功能显示填充轮廓。我已经从Canny检测得出的边缘图像中开发出轮廓列表,并且正在寻找RETR_EXTERNAL启用了层次结构定义的轮廓。但是,我遇到了一个问题,尽管-1cv2.drawContours命令中使用了标志来指示填充的轮廓,但仅显示轮廓本身(即边缘)。例如:

mask = np.zeros(rawimg.shape, np.uint8)
cv2.drawContours(mask, contours[246], -1, (0,255,255), -1)
Run Code Online (Sandbox Code Playgroud)

结果仅显示轮廓246的轮廓。由于我仅检索外部轮廓,因此我认为看不到每个边缘处的内部轮廓和外部轮廓之间的差异,因此我对为什么显示轮廓但不填充为轮廓感到有些困惑该-1标志会建议它应该。


编辑: 完整的代码包含在下面。问题出在以下一行:cv2.drawContours(mask,cnt,2,(0,255,255),-1)虽然这是Dan所建议的格式,但结果如下图所示:

图片链接。cnt是单个轮廓,因此这是指轮廓中的单个点。当行更改为:

cv2.drawContours(mask, cnt, -1, (0,255,255), -1)
Run Code Online (Sandbox Code Playgroud)

轮廓将像以前一样打印,但是轮廓仍然没有填充,因为命令末尾的-1标志表明应该填充轮廓。

测试图片:

在这里上传

import os
import cv2
import numpy as np
from matplotlib import pyplot as plt
import copy as cp

path = 'C:\\Users\\...deleted...\\Desktop\\testimage6.jpg'



#Determine largest contour in the image
def maxContour(contours):
    cnt_list = np.zeros(len(contours))
    for i in range(0,len(contours)):
        cnt_list[i] = cv2.contourArea(contours[i])

    max_value = np.amax(cnt_list)
    max_index = np.argmax(cnt_list)
    cnt = …
Run Code Online (Sandbox Code Playgroud)

python opencv

4
推荐指数
1
解决办法
8174
查看次数

标签 统计

opencv ×1

python ×1