gpt4 book ai didi

python-3.x - OpenCV的findContours功能

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

我正在尝试学习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
我现在不知道该怎么办以及如何解决该问题。
谢谢您的帮助

最佳答案

  • ,您将该区域保存为变量a,但将其与area一起使用,可以通过将变量名a更改为area
  • 来解决此问题。

    area = cv2.contourArea(cnt)
  • cv2.drawContour中有一个错字,您应该像cv2.drawContours这样写
  • cv2.drawContours方法期望您要绘制的轮廓为列表列表,因此您需要像这样调用它

  • cv2.drawContours(imgContour,[cnt],-1,(255,0,0),3)
  • 当您将图像传递给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)

    关于python-3.x - OpenCV的findContours功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62608129/

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