ロボットを動かして物体を見つけたら止まるという動作を行いたいと思っています。
その条件として矩形に囲まれ、さらに直線が矩形にある際、目的のものとしたいと思っています。
同時にこの条件が成り立ったとき出力を1、そうでないときを0にしたいと考えています。
python
1(省略)#与えられた画像から 2#矩形検出 3img, contours, hierarchy = cv2.findContours(th1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1) 4if len(contours) > 0: 5 for i in range(0, len(contours)): 6 #perimeter = cv2.arcLength(contours[i],True) 7 #if perimeter > 10: 8 cnt = contours[i] 9 M = cv2.moments(cnt) 10 #print(M) 11 area = cv2.contourArea(cnt) 12 print(area) 13 if 500 < area < 5000: 14 # continue 15 16 #rect = contours[i] 17 #x, y, w, h = cv2.boundingRect(rect) 18 #cv2.rectangle(img_src, (x, y), (x + w, y + h), (255, 0, 0), 2) 19 rect = cv2.minAreaRect(contours[i]) 20 box = cv2.boxPoints(rect) 21 #print(box) 22 box = np.int0(box) 23 x1,x2,x3,x4 = np.int0(box) 24 a = np.array(x1) 25 b = np.array(x2) 26 c = np.array(x3) 27 d = np.array(x4) 28 #d = math.sqrt((x4-x1)** 2) 29 A = np.linalg.norm(a-b) 30 B = np.linalg.norm(a-c) 31 C = np.linalg.norm(a-d) 32 33 print("頂点",x1,x2,x3,x4) 34 print("Aの長さ", A) 35 print("Bの長さ",B) 36 print("Cの長さ",C) 37 if A > B: 38 min = A 39 else: 40 min = B 41 if C > min: 42 min = C 43 print("最小",min) 44 if 5 < min < 25: 45 im = cv2.drawContours(img_src,[box],0,(0,255,0),2) 46 47#直線検出 48LSD = cv2.createLineSegmentDetector() 49 50lines, width, prec, nfa = LSD.detect(edges) 51#print(width) 52#print(lines) 53#print(prec) 54#print(nfa) 55 56#color = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR) 57 58for i in range(len(lines)): 59 60 for x1,y1,x2,y2 in lines[i] : 61 #if width > 1.2: 62 # continue 63 cv2.line(img_src,(x1,y1),(x2,y2),(0,0,255),2) 64(以下省略) 65
この2つの処理をどう用いて使い、フラグを立てる方法のイメージがつかず、アドバイスいただけると幸いです。
回答2件
あなたの回答
tips
プレビュー