カメラを用いて映った物体に対して処理を行おうとおもっています
以前動いたプログラムを一部書き換え試しました
以前動いたプログラムもエラーをはくようになってしまいました
python
1import cv2 2import math 3import numpy as np 4 5# cv2.cv.CV_FOURCC 6def cv_fourcc(c1, c2, c3, c4): 7 return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \ 8 ((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24) 9 10 11if __name__ == '__main__': 12 # 13 ESC_KEY = 27 # 14 INTERVAL= 33 # 33 15 FRAME_RATE = 30 # fps 16 17 ORG_WINDOW_NAME = "ORG" 18 DST_WINDOW_NAME = "DST" 19 20 FILE_NAME1 = "1.avi" 21 FILE_NAME2 = "2.avi" 22 FILE_NAME3 = "3.avi" 23 FILE_NAME4 = "4.avi" 24 FILE_NAME5 = "5.avi" 25 26 DEVICE_ID = 1 27 28 # 29 cap = cv2.VideoCapture(DEVICE_ID) 30 31 # 32 end_flag, c_frame = cap.read() 33 height, width, channels = c_frame.shape 34 image_size = height * width 35 rec = cv2.VideoWriter(FILE_NAME1, \ 36 cv_fourcc('X', 'V', 'I', 'D'), \ 37 FRAME_RATE, \ 38 (width, height), \ 39 True) 40 rec2 = cv2.VideoWriter(FILE_NAME2, \ 41 cv_fourcc('X', 'V', 'I', 'D'), \ 42 FRAME_RATE, \ 43 (width, height), \ 44 True) 45 rec3 = cv2.VideoWriter(FILE_NAME3, \ 46 cv_fourcc('X', 'V', 'I', 'D'), \ 47 FRAME_RATE, \ 48 (width, height), \ 49 True) 50 rec4 = cv2.VideoWriter(FILE_NAME4, \ 51 cv_fourcc('X', 'V', 'I', 'D'), \ 52 FRAME_RATE, \ 53 (width, height), \ 54 True) 55 rec5 = cv2.VideoWriter(FILE_NAME5, \ 56 cv_fourcc('X', 'V', 'I', 'D'), \ 57 FRAME_RATE, \ 58 (width, height), \ 59 True) 60 61 # 62 cv2.namedWindow(ORG_WINDOW_NAME) 63 cv2.namedWindow(DST_WINDOW_NAME) 64 65 # 66 while end_flag == True: 67 gauss = cv2.GaussianBlur(c_frame, (11, 11), 0) 68 gray = cv2.cvtColor(gauss, cv2.COLOR_BGR2GRAY) 69 ret,th1 = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY) 70 edges = cv2.Canny(th1, 50, 150) 71 img, contours, hierarchy = cv2.findContours(th1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1) 72 for i in range(0, len(contours)): 73#for cnt in contours: 74 cnt = contours[i] 75 area = cv2.contourArea(cnt) 76 print(area) 77 78 if 500 < area < 5000: 79 rect = cv2.minAreaRect(cnt) 80 box = cv2.boxPoints(rect) 81 82 (cx, cy), (width, height), angle = rect 83 diag = np.linalg.norm([width, height]) 84 print(width, height, diag) 85 # 161.91236877441406 16.144147872924805 162.715237986 86 87 # 長方形の幅、高さ、対角線の長さは cv2.minAreaRect() の返り値 88 # を見ればわかるので計算しなくてもよい。 89 #x1, x2, x3, x4 = box 90 #A = np.linalg.norm(x1 - x2) 91 #B = np.linalg.norm(x1 - x3) 92 #C = np.linalg.norm(x1 - x4) 93 #print("頂点",x1, x2, x3, x4) 94 #print("Aの長さ", A) # Aの長さ 16.1441 95 #print("Bの長さ",B) # Bの長さ 162.715 96 #print("Cの長さ",C) # Cの長さ 161.912 97 A = width 98 B = height 99 C = diag 100 101 if A < B: 102 min = A 103 else: 104 min = B 105 if C < min: 106 min = C 107 print("最小", min) 108 if 5 < min < 25: 109 # drawContours() の contours 引数は int 型でないといけない。 110 cv2.drawContours(c_frame, [box.astype(int)], -1, (0, 255, 0), 2) 111 112 113 def within(line, rect): 114 115 p1, p2 = tuple(line[:2]), tuple(line[2:]) 116 # 線の始点と終点が長方形内に含まれるかどうか 117 return cv2.pointPolygonTest(box, p1, False) >= 0 and \ 118 cv2.pointPolygonTest(box, p2, False) >= 0 119 120 LSD = cv2.createLineSegmentDetector() 121 lines, width, prec, nfa = LSD.detect(edges) 122 lines = np.squeeze(lines) 123 124 for line in lines: 125 p1, p2 = tuple(line[:2]), tuple(line[2:]) 126 127 if within(line, rect): 128 # 長方形に含まれる場合は赤色で描画 129 cv2.line(c_frame, p1, p2, (0, 0, 255), 2) 130 else: 131 # 長方形に含まれない場合は赤色で描画 132 cv2.line(c_frame, p1, p2, (255, 0, 0), 2) 133 134 cv2.imshow(ORG_WINDOW_NAME, c_frame) 135 #cv2.imshow('res',gauss) 136 #cv2.imshow('4', disp_in_img) 137 #cv2.imshow('3', gray) 138 #cv2.imshow("1", th1) 139 #cv2.imshow("2", edges) 140 # 141 #rec.write(gray) 142 # rec2.write(c_frame) 143 #rec3.write(th1) 144 #rec4.write(edges) 145 #rec5.write(gauss) 146 147 # 148 key = cv2.waitKey(INTERVAL) 149 if key == ESC_KEY: 150 break 151 152 # 153 end_flag, c_frame = cap.read() 154 155 # 156 cv2.destroyAllWindows() 157 cap.release() 158 rec.release() 159
このようなエラーがでてしまいます
Traceback (most recent call last):
File "kamera.py", line 35, in <module>
height, width, channels = c_frame.shape
AttributeError: 'NoneType' object has no attribute 'shape'
カメラが画像を読み込めていないことが原因だとおもうのですが、以前動いたものがうごかくなるということはどういったことなのでしょうか
回答1件
あなたの回答
tips
プレビュー