【问题标题】:Opencv findCountours functionOpencv findContours 函数
【发布时间】:2020-06-27 09:19:50
【问题描述】:

我正在努力学习opencv。在网上我发现,用opencv,我可以得到一些图像的轮廓。所以我试过了。这是脚本:

import cv2
import numpy as np

def getC(imagine):
    global imgContour
    c,h = cv2.findContours(imagine,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
    for cnt in c:
        a = cv2.contourArea(cnt)
        print(area)
        if area>500:
            cv2.drawContour(imgContour,cnt,-1,(255,0,0),3)

img = cv2.imread("a3.jpg")
imgContour = img.copy()
imgG = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgB = cv2.GaussianBlur(imgG,(7,7),1)
imgC = cv2.Canny(imgB,50,50)

getC(imgContour)

cv2.imshow("",img)
cv2.imshow("g",imgG)
cv2.imshow("b",imgB)
cv2.imshow("l",imgContour)
cv2.waitKey(0)

我认为全局变量存在问题,格式也存在问题。 a3.jpg 就是那个image

我现在不知道现在该怎么办,以及如何解决问题。

感谢您的帮助

【问题讨论】:

    标签: python-3.x opencv computer-vision


    【解决方案1】:
    1. 您将该区域保存为变量a,但将其与名称area 一起使用,您可以通过将变量名称a 更改为area 来解决此问题
    area = cv2.contourArea(cnt)
    
    1. cv2.drawContour 有错别字,你应该这样写cv2.drawContours

    2. cv2.drawContours 方法期望您要绘制的轮廓是列表列表,因此您需要这样调用它

    cv2.drawContours(imgContour,[cnt],-1,(255,0,0),3)
    
    1. 当您将图像传递给 getC 方法时,您给了它一个图像,而没有对该图像进行预处理并使用 canny 将其转换为阈值图像,因此您需要这样调用它
    getC(imgC)
    

    最终脚本

    
    import cv2
    import numpy as np
    
    
    def getC(imagine):
    
        global imgContour
        print(imgContour.shape)
        c,h = cv2.findContours(imagine,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
        for cnt in c:
            area = cv2.contourArea(cnt)
            print(area)
            if area>500:
                cv2.drawContours(imgContour,[cnt],-1,(255,0,0),3)
    
    
    img = cv2.imread("./a3.jpg")
    imgContour = img.copy()
    
    imgG = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    imgB = cv2.GaussianBlur(imgG,(7,7),1)
    imgC = cv2.Canny(imgB,50,50)
    
    getC(imgC)
    
    cv2.imshow("",img)
    cv2.imshow("g",imgG)
    cv2.imshow("b",imgB)
    cv2.imshow("l",imgContour)
    cv2.waitKey(0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 2012-12-14
      • 2012-06-05
      • 1970-01-01
      • 2016-04-15
      • 2017-01-12
      • 1970-01-01
      相关资源
      最近更新 更多