gpt4 book ai didi

opencv - 如何使用 OpenCV 检测简单的几何形状

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

我有一个项目,我需要(在 iOS 上)检测图像内的简单几何形状。

enter image description here

在搜索互联网后,我得出的结论是,最好的工具是 OpenCV。问题是,直到两个小时前我还不知道 OpenCV 是什么,而且我什至从未做过任何涉及图像处理的事情。我的主要经验是JS/HTML,C#,SQL,Objective-C...

我从哪里开始呢?

我找到了这个answer我能够消化并通过阅读其他内容,我了解到 OpenCV 应该返回带有点/角的形状数组,这是真的吗?另外它如何表示一个圆或半圆?还有形状方向呢?

您知道有任何可以演示类似功能的 iOS 演示项目吗?

最佳答案

如果您只有这些常规形状,则有一个简单的过程如下:

  1. 在图像中查找轮廓(图像应该是问题中给出的二进制图像)
  2. 使用 approxPolyDP 函数近似每个轮廓。
  3. 检查所有形状的近似轮廓中的元素数量以识别形状。例如,正方形有 4 个,五边形有 5 个。圆形会有更多,我不知道,所以我们找到它。 (我的圆形为 16,半圆形为 9)
  4. 现在指定颜色,运行测试图像的代码,检查其编号,并用相应的颜色填充。

下面是我的 Python 示例:

import numpy as np
import cv2

img = cv2.imread('shapes.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,thresh = cv2.threshold(gray,127,255,1)

contours,h = cv2.findContours(thresh,1,2)

for cnt in contours:
approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
print len(approx)
if len(approx)==5:
print "pentagon"
cv2.drawContours(img,[cnt],0,255,-1)
elif len(approx)==3:
print "triangle"
cv2.drawContours(img,[cnt],0,(0,255,0),-1)
elif len(approx)==4:
print "square"
cv2.drawContours(img,[cnt],0,(0,0,255),-1)
elif len(approx) == 9:
print "half-circle"
cv2.drawContours(img,[cnt],0,(255,255,0),-1)
elif len(approx) > 15:
print "circle"
cv2.drawContours(img,[cnt],0,(0,255,255),-1)

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

下面是输出:

enter image description here

请记住,它仅适用于常规形状。

要查找圆圈,您还可以使用 houghcircles。您可以找到tutorial here .

关于 iOS,OpenCV 开发者今年夏天正在开发一些 iOS 示例,因此请访问他们的网站:www.code.opencv.org并联系他们。

您可以找到他们的教程幻灯片 here

关于opencv - 如何使用 OpenCV 检测简单的几何形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11424002/

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