帯状のものを認識するためにその物体の頂点を用いて矩形検出し、さらに直線権出検出し矩形内に直線があるとき帯であるとしたいと考えています。
プログラミング初心者でありまして思ったようなことができません。
flagを用いて矩形検出と直線検出の処理がなされたら"prosess"という出力を出すプログラムをかいたのですが、上で述べたような矩形内に直線があった場合"prosess"としたいです。
今の形ですと処理をしたら検出されなくてもprosessとなってしまいます。
説明が下手で申し訳ないのですが、ご教授いただければ幸いです。
python
1#与えられた画像から 2(以下省略) 3#矩形検出 4def func1(): 5 img, contours, hierarchy = cv2.findContours(th1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1) 6 if len(contours) > 0: 7 #print("true") 8 #return True 9 #else: 10 #return False 11 for i in range(0, len(contours)): 12 #perimeter = cv2.arcLength(contours[i],True) 13 #if perimeter > 10: 14 cnt = contours[i] 15 M = cv2.moments(cnt) 16 #print(M) 17 area = cv2.contourArea(cnt) 18 print(area) 19 if 500 < area < 5000: 20 # continue 21 22 #rect = contours[i] 23 #x, y, w, h = cv2.boundingRect(rect) 24 #cv2.rectangle(img_src, (x, y), (x + w, y + h), (255, 0, 0), 2) 25 rect = cv2.minAreaRect(contours[i]) 26 box = cv2.boxPoints(rect) 27 #print(box) 28 box = np.int0(box) 29 x1,x2,x3,x4 = np.int0(box) 30 a = np.array(x1) 31 b = np.array(x2) 32 c = np.array(x3) 33 d = np.array(x4) 34 #d = math.sqrt((x4-x1)** 2) 35 A = np.linalg.norm(a-b) 36 B = np.linalg.norm(a-c) 37 C = np.linalg.norm(a-d) 38 39 print("頂点",x1,x2,x3,x4) 40 print("Aの長さ", A) 41 print("Bの長さ",B) 42 print("Cの長さ",C) 43 44 if A < B: 45 min = A 46 else: 47 min = B 48 if C < min: 49 min = C 50 print("最小",min) 51 if 5 < min < 25: 52 im = cv2.drawContours(img_src,[box],0,(0,255,0),2) 53 54 return True 55a = func1() 56print(a) 57 58#直線検出 59def func2(): 60 LSD = cv2.createLineSegmentDetector() 61 62# 63 lines, width, prec, nfa = LSD.detect(edges) 64 print(width) 65#print(lines) 66#print(prec) 67#print(nfa) 68 69#color = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR) 70 if lines is not None: 71 for i in range(len(lines)): 72 73 for x1,y1,x2,y2 in lines[i] : 74 #if width > 1.2: 75 # continue 76 cv2.line(img_src,(x1,y1),(x2,y2),(0,0,255),2) 77 return True 78b = func2() 79print(b) 80 81 82if func1() and func2() == True: 83 print("prosess") 84else: 85 print("no") 86
あなたの回答
tips
プレビュー