これらの規則的な形状しかない場合は、次のような簡単な手順があります。
- 画像内の輪郭を見つけます(画像は質問で指定されているようにバイナリである必要があります)
- 関数を使用して各輪郭を近似し
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