###前提・実現したいこと
このサイトは写真をバスケットボールを色と円検出で見つけ出すプログラムが書かれています。
私はこれを応用して動画でこれを可能にしたいと考えています。
###発生している問題・エラーメッセージ
問題があるものはコメントアウトしてあります。
cam_orange = copy()は写真にしか使うことができないみたいで
AttributeError:'cv2.VideoCapture' object has no attribute 'copy'
とでてきてコピーができないならwhileの外で新しくcam1定義してcam_orange[cam_hsv==0] = 0をしてみると
TypeError: 'cv2.VideoCapture' object does not support item assignment
とエラーが出ます。
cv2.circleのところも
TypeError: img is not a numpy array, neither a scalar
というエラーが出ます。動画では配列操作が難しいのでしょうか?
ちなみに動画は上に乗せたサイトの写真をQuickTime Playerで画面収録したものを使ったので問題はないと思います。
#該当のソースコード
python
import numpy as np import cv2 cam = cv2.VideoCapture('bask.mov') cam1 = cv2.VideoCapture('bask.mov') while(cam.isOpened()): ret, frame = cam.read() cam_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) cam_hsv = cv2.inRange(cam_hsv, (7,180,180), (11,255,255)) #cam_orange = cam.copy() #cam_orange = cam1 #cam_orange[cam_hsv==0] = 0 element = np.ones((5,5)).astype(np.uint8) cam_hsv = cv2.erode(cam_hsv, element) cam_hsv = cv2.dilate(cam_hsv, element) points = np.dstack(np.where(cam_hsv>0)).astype(np.float32) center, radius = cv2.minEnclosingCircle(points) #cv2.circle(cam, (int(center[1]), int(center[0])), int(radius), (255,0,0), thickness=3) cv2.imshow('preview', cam_hsv) if cv2.waitKey(1) & 0xFF == ord('q'): break cam.release() cv2.destroyAllWindows()
#試したこと
python
import numpy as np import cv2 im = cv2.imread('bask.png') im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV) im_hsv = cv2.inRange(im_hsv, (7,180,180), (11,255,255)) im_orange = im.copy() im_orange[im_hsv==0] = 0 element = np.ones((5,5)).astype(np.uint8) im_hsv = cv2.erode(im_hsv, element) im_hsv = cv2.dilate(im_hsv, element) points = np.dstack(np.where(im_hsv>0)).astype(np.float32) center, radius = cv2.minEnclosingCircle(points) cv2.circle(im, (int(center[1]), int(center[0])), int(radius), (255,0,0), thickness=3) cv2.imshow('detect ',im) #cv2.imshow('detected ',im_orange) #cv2.imshow('detected circles',im_hsv) cv2.waitKey(0) cv2.destroyAllWindows()
これは上に乗せたサイトを真似したもので写真から検出するものですがうまくいきます。
まだ回答がついていません
会員登録して回答してみよう