当前位置: 首页 > 知识库问答 >
问题:

我试图检测图像中红色物体上的轮廓,但在使用openCv时不断出现错误。findContour函数

越涵衍
2023-03-14

我试图获得图像的一部分轮廓,但调用cv时不断出现错误。找到你的形象。为了在图像中找到物体,我首先尝试提取物体的颜色,它是红色的,然后我尝试在检测到的物体上找到轮廓。

import cv2 as cv
import numpy as np


def main():

    image_find_goal = "image.jpg"
    kernel = np.ones((5,5),np.uint8)
    #findGoal(image_find_goal)
    img1 = cv.imread(image_find_goal)
    img = cv.resize(img1,(700,700))
    hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)

    #range for red color
    lower_r = np.array([160,100,100])
    upper_r = np.array([179,255,255])
    mask = cv.inRange(hsv,lower_r,upper_r)
    res = cv.bitwise_and(img,img,mask=mask)
    _,thresh = cv.threshold(res,125,255,cv.THRESH_BINARY)
    dilate =  cv.dilate(thresh,None,iterations=1)

    contours, hierarchy = cv.findContours(dilate,cv.RETR_TREE,cv.CHAIN_APPROX_NONE)
    for cnt in contours:
        epsilon = 0.1*cv.arcLength(cnt,True)
        approx = cv.approxPolyDP(cnt,epsilon,True)
        if len(approx) == 4:
            cv.drawContours(img,cnt,-1,(60,255,255),4)

    cv.imshow('OBSTACLES',img)
    cv.waitKey(0)
    cv.destroyWindow(img)

我得到的错误是:

轮廓,层次=cv。找到的容器(扩张,cv.翻新树,cv.链约无)cv2。错误:OpenCV(4.4.0)/tmp/pip-req-build-sw_3pm_8/OpenCV/modules/imgproc/src/contours。cpp:195:错误:(-210:不支持的格式或格式组合)[Start]FindContours在模式下仅支持CV_8UC1图像!=CV_RETR_FLOODFILL仅在函数“cvStartFindContours_Impl”中支持CV_32SC1图像

共有1个答案

归明诚
2023-03-14

Ciao,

我认为这个片段解决了你的问题。因为你对轮廓感兴趣,我会在扩张前应用Canny边缘检测。此操作还将修复您得到的CV类型错误

import cv2 as cv
import numpy as np

image_find_goal = "image.jpg"
#findGoal(image_find_goal)
img1 = cv.imread(image_find_goal)
img = cv.resize(img1,(700,700))
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)

#range for red color
lower_r = np.array([160,100,100])
upper_r = np.array([179,255,255])
mask = cv.inRange(hsv,lower_r,upper_r)
res = cv.bitwise_and(img,img,mask=mask)
_,thresh = cv.threshold(res,125,255,cv.THRESH_BINARY)

# check which are the best canny threshold values for your image
imgCanny = cv.Canny(thresh, 180, 180)
dilate = cv.dilate(imgCanny, None, iterations = 1)
# cv.imshow("dilate", dilate)
# cv.waitKey()

contours, hierarchy = cv.findContours(dilate,cv.RETR_TREE,cv.CHAIN_APPROX_NONE)
for cnt in contours:
    epsilon = 0.1*cv.arcLength(cnt,True)
    approx = cv.approxPolyDP(cnt,epsilon,True)
    if len(approx) == 4:
        cv.drawContours(img,cnt,-1,(60,255,255),4)

cv.imshow('OBSTACLES',img)
cv.waitKey(0)
cv.destroyAllWindows()

祝你愉快,
安东尼诺

 类似资料:
  • 我正在使用openCV检测图像中的矩形。在许多例子中,我使用阈值findContour约PolyDP。 如下图所示,我的问题是findContours找到的轮廓无法继续,因此在approxPolyDP之后,我无法获得矩形。。。 那么,你知道如何解决这个问题吗?谢谢你。:) 另一个问题:为什么轮廓是灰色的?在阈值之后,应该只有白色和黑色,不是吗? 轮廓 经批准

  • 我的任务是使用OpenCV检测给定图像中的对象(我不关心它是Python还是C++实现)。下面的三个示例中显示的对象是一个黑色矩形,其中包含五个白色矩形。所有维度都是已知的。 但是,图像的旋转、比例、距离、透视、光照条件、相机对焦/镜头、背景都是未知的。黑色矩形的边缘不能保证是完全可见的,但是在五个白色矩形前面不会有任何东西--它们总是完全可见的。最终目标是能够在图像中检测到该对象的存在,并旋转、

  • 本文向大家介绍如何使用Java OpenCV库查找图像轮廓?,包括了如何使用Java OpenCV库查找图像轮廓?的使用技巧和注意事项,需要的朋友参考一下 轮廓线不过是连接沿着特定形状的边界的所有点的线。使用这个你可以- 查找对象的形状。 计算对象的面积。 检测物体。 识别对象。 您可以使用findContours()方法找到图像中各种形状的轮廓,对象。此方法接受以下参数- 二进制图像。 类型为M

  • 问题内容: 我正在尝试从图像中提取红色。我有应用阈值的代码,仅保留指定范围内的值: 但是,正如我检查的那样,红色的色相值可以在0到10的范围内,也可以在170到180的范围内。因此,我想保留这两个范围中任何一个的色相值。我尝试将阈值从10设置为170并使用函数,但随后我也获得了所有白色。我认为最好的选择是为每个范围创建一个遮罩并同时使用它们,因此我必须以某种方式将它们合并在一起,然后再继续。 有没

  • 我正在尝试使用Alamofire4.8.2将一组图像上传到服务器 以下是函数: 在下面的行中获取错误: 无法使用类型为“(UIImage,withName:String,fileName:String,mimeType:String)”的参数列表调用“append”

  • 错误:/io/opencv/modules/highgui/src/window。cpp:583:错误:(-2)未实现该函数。使用Windows、GTK 2重建库。x或碳载体。如果您使用的是Ubuntu或Debian,请安装libgtk2。0-dev和pkg config,然后在函数cvShowImage中重新运行cmake或配置脚本