2016-04-27 27 views
2

私はOpen Cv(python 2.7)で赤い色のオブジェクトの輪郭を特定しようとしており、それらを識別することに成功しました。しかし、私は赤色のオブジェクト(左または右)の位置を検出したいと私はそうに成功していません。誰かが私にコードやステップを与えることができれば、本当に感謝しています。Opencv Python 2.7の輪郭検出

次のように赤色の物体を識別するための我々の現在のコードは次のとおりです。

import numpy as np 
import cv2 
cap = cv2.VideoCapture(0) 
while(1): 
    _, frame = cap.read() 
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
    lower_color = np.array([0, 50, 50]) 
    upper_color = np.array([60, 255, 255]) 
    mask = cv2.inRange(hsv, lower_color, upper_color) 
    mask = cv2.erode(mask, None, iterations=2) 
    mask = cv2.dilate(mask, None, iterations=2) 
    res = cv2.bitwise_and(frame, frame, mask=mask) 

    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] 
    cv2.drawContours(frame, cnts, 0, (127, 255, 0), 3) 
print cnts 
cv2.imshow('frame', frame) 
cv2.imshow('mask', mask) 
cv2.imshow('res', res) 
cv2.imshow('contours', frame) 



k = cv2.waitKey(5) & 0xFF 
if k == 27: 
    print "release" 

    break 
cap.release() 
cv2.destroyAllWindows() 

答えて

1

さて、あなたは一歩離れた位置を取得するです。輪郭の周りにboundingrectを作成し、その中心を計算してオブジェクトの座標を取得することができます。

また、minEnclosingCircleを試すこともできます。その中心と半径を指定できます。これは、中心を見つけるためにもう少し直接かもしれません:)

Hereあなたは両方の機能の小さなチュートリアルを見つけることができますが、C + +で。 Pythonで

が、この場合、この

... 
cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] 
cv2.drawContours(frame, cnts, 0, (127, 255, 0), 3) 
(x,y),radius = cv2.minEnclosingCircle(cnts[0]) 
center = (int(x),int(y)) 
radius = int(radius) 
cv2.circle(frame, center, radius, (255, 0, 0), 3) 
... 

ようになり、中央部には、あなたのオブジェクトの位置になります。このコードは、配列内の最初の輪郭のみを考慮に入れます...

+0

アイデアをありがとう。 –

+0

cv2.circle(フレーム、中心、半径、(255、0、0)、3) TypeError:整数引数が必要です。浮動小数点があります。このエラーが発生しました。あなたが今私のプログラムでこの声明を追加しなければならないところで私を御願いしてください....これは今私がプロジェクトに取り組んでいる時には本当に緊急です。 –

+0

@AdhityanSridharanどのようなプログラムですか?私はすでにあなた自身のコードの中にコードを入れました....私はエラーを修正するコードを更新しました – api55