私はプログラミングには全く新しいので、神経を使うにはPython(2.7.6)、OpenCV、ROSを理解しようとしていますロボットのネットワーク。OpenCV HSV値はスクリーン/カメラ上の場所によって変わります
ちょうど、正しいHSV値を取得するためにOpenCV(2.4.8)の問題に悩まされています。つまり、突然赤(約5色相)または青色(色相約110)から緑色約40/50)、カメラを動かすだけで画面の反対側に画像を表示します。
class CV:
def __init__(self):
# Initialize object
self.cap = cv2.VideoCapture(0) # '0' should stay or won't work for me
self.cap.set(cv2.cv.CV_CAP_PROP_FPS, 0.1)
def recognize(self):
while True:
ret, frame = self.cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Thresholding and contour finding
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray_blur = cv2.GaussianBlur(gray, (15, 15), 0)
thresh = cv2.adaptiveThreshold(gray_blur, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV, 11, 1)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
# Largest contour
areas = [cv2.contourArea(c) for c in contours]
max_index = np.argmax(areas)
cnt = contours[max_index]
# Find center
(x, y), radius = cv2.minEnclosingCircle(cnt)
center = int(x), int(y)
center_int = list(center)
# Color recognition
print hsv[center_int[0], center_int[1]]
# Show capture
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
self.cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
object = CV()
object.recognize()
ですから、画面の左または右のいずれかに赤または青の円を表示しています。私はビデオ入力からの色認識のHSV値を取得しようとしています。画像は、私のウェブカメラに面している別の画面に表示されます。
私のコードでは、私が最大の輪郭を見つけてから、最小の囲み円を見つけて、中心(x、y)座標からHSV値を得ることができます。左に私のサークルを表示すると、青色のように赤色を見つけることができますが、どちらの色でも、画面の右側にサークルを表示すると、上記の緑色の範囲でHSV値が完全にオフになります。
カメラを右から左にゆっくり動かすと(カムのフレームが左から右に移動するため)、HSV値が突然青/赤から緑に変わります1つの画素から次の画素への色相(彩度と値が大きく異なるが、それらにはあまり関心がない)。
実際に画面のどこから色を取得しているのかが分かっていますが、正しいデバッグ用のテクニックが見つからないため、自分自身で答えを得ることができません。
EDIT Iは、中心に円が中心である最小外接円の座標とそれが適所にあると思われる場所を追跡するために、形状の座標を印刷しました。しかし、背景を青色(白から)に変更したところ、シェイプが画面の右側にあるときHSV値が青色になるので、HSV値が中心座標から来ないように見えますが、ないアイデアなぜ..私は間違っていたところ、私はついに見つけ、この問題に苦しんでの2日後
あなた自身の答え、良い仕事を受け入れることができます! – Divakar
私に思い出させてくれてありがとう、私は少し不安だった.. –