【问题标题】:Trying to Capture Shapes in an image in openCV Python尝试在openCV Python中捕获图像中的形状
【发布时间】:2022-01-05 16:06:39
【问题描述】:

我有下面显示的图像,我正在尝试捕获正方形并在它们周围放置一条绿线,任何帮助或方向都会很棒。

import numpy as np
import cv2

img = cv2.imread('beef.png')
imgGry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret , thrash = cv2.threshold(imgGry, 240 , 255, cv2.CHAIN_APPROX_NONE)
contours , hierarchy = cv2.findContours(thrash, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

for contour in contours:
approx = cv2.approxPolyDP(contour, 0.01* cv2.arcLength(contour, True), True)
cv2.drawContours(img, [approx], 0, (0, 0, 0), 5)
x = approx.ravel()[0]
y = approx.ravel()[1] - 5
x, y , w, h = cv2.boundingRect(approx)
aspectRatio = float(w)/h
print(aspectRatio)

if aspectRatio >= 0.95 and aspectRatio < 1.05:
cv2.putText(img, "square", (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 0, 0))

else:
cv2.putText(img, "rectangle", (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 0, 0))

cv2.imshow('shapes', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    我不确切知道您的问题是什么(轮廓是否错误?图像上没有绘制任何内容?等等)但这里有一些猜测。

    要在轮廓周围画线,看起来您当前正在使用白色 (0,0,0) 来勾勒轮廓。 -1 是绘制所有轮廓,看看是否得到任何结果。

    还有一些 cv2 函数具有破坏性,所以我在创建输出图像时从不使用 img。我会在原始 img 的副本上进行 imShow 和 drawContours。

    cv2.drawContours(img, contours, -1, GREEN, 5)
    

    【讨论】:

    • 让我试试
    • 这是我得到的结果photos.app.goo.gl/pLtpEHYWTirD5Yj86
    • 这将是所需的结果。 photos.app.goo.gl/uiYQXytQAuxPYzN4A
    • 您的阈值可能需要更改,正如您在第一张图片上看到的那样,我们正在绘制所有检测到的边缘,但您的图片甚至不包括您想要的框。我通常只展示几个不同的范围,直到我在我的兴趣点上获得硬边。一旦你有一个合适的阈值,你可以查看 cv2.RETR_TREE 因为不同的 cv2 层次结构将连接在一起的轮廓形状(比如哪些被其他人包含等)。有时这很有用,有时没必要。
    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 2010-12-20
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2015-04-15
    • 2012-02-05
    • 2017-04-15
    相关资源
    最近更新 更多