前提・実現したいこと
ラズパイ上でopencv3を利用したラズパイカメラでリアルタイムに赤色の物体を識別するプログラムをPythonで書いています.
下記に示すソースコードを実行するとエラーが出ます.ラズパイ,opencv共に初心者でわからないので御教授お願いします.
発生している問題・エラーメッセージ
Traceback (most recent call last): File "cameratest.py", line 23, in <module> rects = find_rect_of_target_color(frame) File "cameratest.py", line 6, in find_rect_of_target_color hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) cv2.error: OpenCV(3.4.2) /home/pi/opencv/modules/imgproc/src/color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'CvtHelper'
該当のソースコード
import cv2 import numpy as np def find_rect_of_target_color(image): hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) h = hsv[:, :, 0] s = hsv[:, :, 1] mask = np.zeros(h.shape, dtype=np.uint8) mask[((h < 20) | (h > 200)) & (s > 128)] = 255 contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) rects = [] for contour in contours: approx = cv2.convexHull(contour) rect = cv2.boundingRect(approx) rects.append(np.array(rect)) return rects if __name__ == "__main__": capture = cv2.VideoCapture() while cv2.waitKey(30) < 0: _, frame = capture.read() rects = find_rect_of_target_color(frame) if len(rects) > 0: rect = max(rects, key=(lambda x: x[2] * x[3])) cv2.rectangle(frame, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (0, 0, 255), thickness=2) cv2.imshow('red', frame) capture.release() cv2.destroyAllWindows()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー