如果你只有这些规则的形状,有一个简单的过程如下:
- 在图像中查找轮廓(图像应该是您的问题中给出的二进制)
approxPolyDP
使用函数逼近每个轮廓。
- 首先,检查所有形状的近似轮廓中的元素数量。就是认形状。例如,正方形有 4 个,五边形有 5 个。圆形会有更多,我不知道,所以我们找到它。(我得到了 16 圈和 9 半圈。)
- 现在分配颜色,运行测试图像的代码,检查它的编号,用相应的颜色填充它。
下面是我在 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()
下面是输出:
请记住,它仅适用于常规形状。
或者,要查找圈子,您可以使用houghcircles
. 您可以在此处找到教程。
关于 iOS,OpenCV 开发人员今年夏天正在开发一些 iOS 示例,因此请访问他们的网站:www.code.opencv.org 并与他们联系。
你可以在这里找到他们教程的幻灯片:http: //code.opencv.org/svn/gsoc2012/ios/trunk/doc/CVPR2012_OpenCV4IOS_Tutorial.pdf