def run_original(self): while True: playing = not self.paused and not self.rect_sel.dragging # flag used to quit imaging, when the size detected. flag = 0 # if playing or self.frame is None: # # ret, frame = self.cap.read() # if not ret: # break # self.frame = frame.copy() # size of the frame (image) - used to draw rectangle w, h = getsize(self.frame) vis = np.zeros((h, w*2, 3), np.uint8) # copy to the image (original) vis[:h,:w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:,w:] = target.image draw_keypoints(vis[:,w:], target.keypoints) x0, y0, x1, y1 = target.rect # rectangle coordinates cv.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2) # green line drawn # finding the width of the region width_region = distance(x0, x1, y0, y1) flag = 1 # set flag = 1, quit the program! self.rect_sel.draw(vis) cv.imshow('Selected Region', vis) # show the image ch = cv.waitKey(1) if ch == 27 or flag == 1: print("Quitting") return width_region
def run(self): while True: playing = not self.paused and not self.rect_sel.dragging if playing or self.frame is None: ret, frame = self.cap.read() if not ret: break self.frame = frame.copy() w, h = getsize(self.frame) vis = np.zeros((h, w*2, 3), np.uint8) vis[:h,:w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:,w:] = target.image draw_keypoints(vis[:,w:], target.keypoints) x0, y0, x1, y1 = target.rect cv2.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2) if playing: tracked = self.tracker.track(self.frame) if len(tracked) > 0: tracked = tracked[0] cv2.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2) for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)): cv2.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0)) draw_keypoints(vis, self.tracker.frame_points) self.rect_sel.draw(vis) cv2.imshow('plane', vis) ch = cv2.waitKey(1) if ch == ord(' '): self.paused = not self.paused if ch == 27: break
def run(self): def find_line(p0, p1): x0, y0 = p0 x1, y1 = p1 k = (x1 - x0) / (y1 - y0) b = y1 - k * x0 return k, b def cross(l0, l1): k0, b0 = l0 k1, b1 = l1 x = (b1 - b0) / (k0 - k1) y = k0 * x + b0 return x, y while True: playing = not self.paused and not self.rect_sel.dragging if playing or self.frame is None: ret, frame = self.cap.read() if not ret: break self.frame = frame.copy() w, h = getsize(self.frame) vis = np.zeros((h, w * 2, 3), np.uint8) vis[:h, :w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:, w:] = target.image draw_keypoints(vis[:, w:], target.keypoints) x0, y0, x1, y1 = target.rect cv2.rectangle(vis, (x0 + w, y0), (x1 + w, y1), (0, 255, 0), 2) if playing: tracked = self.tracker.track(self.frame) if len(tracked) > 0: tracked = tracked[0] cv2.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2) # print([np.int32(tracked.quad)]) p0, p1, p2, p3 = np.int32(tracked.quad) l0 = find_line(p0, p2) l1 = find_line(p1, p3) x, y = cross(l0, l1) z = 3 * 180 / (p3[1] - p0[1]) * 1 print(x, y, z) draw_keypoints(vis, self.tracker.frame_points) self.rect_sel.draw(vis) cv2.imshow('plane', vis) ch = cv2.waitKey(1) if ch == ord(' '): self.paused = not self.paused if ch == 27: break
def run(self, Cover_Dimensions, Actual_Dimensions): ''' Runs the program, of selection of the image's region. Approximates the dimensions of the cover based on given dimensions. ''' while True: # flag used to quit imaging, when the size detected. flag = 0 playing = not self.rect_sel.dragging # get size of the book cover w, h = getsize(self.frame) vis = np.zeros((h, w*2, 3), np.uint8) vis[:h,:w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:,w:] = target.image draw_keypoints(vis[:,w:], target.keypoints) x0, y0, x1, y1 = target.rect # get the selected region coordinates cv.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2) Region_Dimensions = [x1 - x0, y1 - y0] print("Region_Dimensions:", Region_Dimensions) # Ratio of the cover dimensions (width) to region dimensions (width) # similarly for height ratio_width = float(Cover_Dimensions)/(Region_Dimensions[0]) # Hard coded the actual width and height of the region. # Actual width (in cm) = 14 # Actual height (in cm) = 1.1 width_of_book = ratio_width * Actual_Dimensions[0] # height_of_book = ratio_height * Actual_Dimensions[1] # Optional (useful in case of video source) if playing: tracked = self.tracker.track(self.frame) if len(tracked) > 0: tracked = tracked[0] cv.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2) for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)): cv.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0)) print("Detected") # break when the region is detected. flag = 1 break draw_keypoints(vis, self.tracker.frame_points) self.rect_sel.draw(vis) cv.imshow('Selected Region', vis) cv.waitKey(1) if flag == 1: print("Dimensions of the book : ", width_of_book) return
def run(self): while True: playing = not self.paused and not self.rect_sel.dragging if playing or self.frame is None: ret, frame = self.cap.read() if not ret: break self.frame = frame.copy() blue = cv.cvtColor(frame, cv.COLOR_BGR2Luv) # Display the resulting frame cv.imshow('self.frame', blue) w, h = getsize(self.frame) vis = np.zeros((h, w * 2, 3), np.uint8) vis[:h, :w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:, w:] = target.image draw_keypoints(vis[:, w:], target.keypoints) x0, y0, x1, y1 = target.rect #cv.rectangle(vis, (x0+w, y0), (x1+w, y1), (255, 0, 0), 2) center_x = int((x0 + x1 + 2 * w) / 2) center_y = int((y0 + y1) / 2) r_x = int(abs((x0 - x1) / 2)) r_y = int(abs((x0 - x1) / 2)) radius = int(math.sqrt((r_x * r_x) + (r_y * r_y))) cv.circle(vis, (center_x, center_y), radius, (0, 0, 255), 2) if playing: tracked = self.tracker.track(self.frame) if len(tracked) > 0: tracked = tracked[0] cv.polylines(vis, [np.int32(tracked.quad)], True, (255, 0, 255), 2) for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)): cv.line(vis, (x0 + w, y0), (x1, y1), (255, 0, 0)) draw_keypoints(vis, self.tracker.frame_points) self.rect_sel.draw(vis) cv.imshow('plane', vis) ch = cv.waitKey(1) if ch == ord(' '): self.paused = not self.paused if ch == 27: break
def run(self): img = cv2.imread('image.jpg') while True: playing = not self.paused and not self.rect_sel.dragging if playing or self.frame is None: ret, frame = self.cap.read() if not ret: break self.frame = frame.copy() w, h = getsize(self.frame) vis = np.zeros((h, w * 2, 3), np.uint8) vis[:h, :w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:, w:] = target.image draw_keypoints(vis[:, w:], target.keypoints) x0, y0, x1, y1 = target.rect cv2.rectangle(vis, (x0 + w, y0), (x1 + w, y1), (0, 255, 0), 2) if playing: tracked = self.tracker.track(self.frame) if len(tracked) > 0: tracked = tracked[0] #cv2.fillPoly(vis, [np.int32(tracked.quad)], 255) cv2.polylines(vis, [np.int32(tracked.quad)], True, (255, 0, 0), 2) xt, yt = tracked.quad[3] font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(vis, 'Planar track', (xt, yt), font, 1, (0, 0, 255), 2) cv2.circle(vis, (xt, yt), 30, (0, 255, 0), 2) #for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)): # cv2.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0)) draw_keypoints(vis, self.tracker.frame_points) self.rect_sel.draw(vis) cv2.imshow('plane', vis) ch = cv2.waitKey(1) if ch == ord(' '): self.paused = not self.paused if ch == 27: break
def run(self): num = 0 while True: if not self.paused: state, frame = self.cap.read() if not state: print 'video end' continue self.frame = frame.copy() show_img = self.frame.copy() if not self.paused and not self.rect_selector.dragging: tracked = self.track(self.frame) if len(tracked) > 0: for tr in tracked: if tr > 0: cv2.polylines(show_img, [np.int32(tr.quad)], True, (255, 255, 255), 2) if not self.paused: keypoints, _ = self.detect_features(show_img) common.draw_keypoints(show_img, keypoints) ''' if len(tracked)>0: tracked = tracked[0] cv2.polylines(show_img, [np.int32(tracked.quad)], True, (255, 255, 255), 2) ''' self.rect_selector.draw(show_img) cv2.imshow('src', show_img) #videowriter.write(show_img) key = cv2.waitKey(10) if key == -1: continue elif key == 27: break elif key == ord(' '): self.paused = not self.paused print self.paused elif key == ord('c'): self.targets = [] self.matcher.clear()
def run(self): num = 0 while True: if not self.paused: state,frame = self.cap.read() if not state: print 'video end' continue self.frame = frame.copy() show_img = self.frame.copy() if not self.paused and not self.rect_selector.dragging: tracked = self.track(self.frame) if len(tracked)>0: for tr in tracked: if tr >0: cv2.polylines(show_img, [np.int32(tr.quad)], True, (255, 255, 255), 2) if not self.paused: keypoints,_ = self.detect_features(show_img) common.draw_keypoints(show_img, keypoints) ''' if len(tracked)>0: tracked = tracked[0] cv2.polylines(show_img, [np.int32(tracked.quad)], True, (255, 255, 255), 2) ''' self.rect_selector.draw(show_img) cv2.imshow('src',show_img) #videowriter.write(show_img) key = cv2.waitKey(10) if key == -1: continue elif key == 27: break elif key == ord(' '): self.paused = not self.paused print self.paused elif key == ord('c'): self.targets = [] self.matcher.clear()
from common import draw_keypoints file1 = '/home/diego/Videos-REID/descriptores/personaAzulWalk2/descriptor8.png' file2 = '/home/diego/Videos-REID/descriptores/personaAzulWalk2/descriptor12.png' detector = cv2.xfeatures2d.SIFT_create() norm = cv2.NORM_L2 matcher = cv2.BFMatcher(norm) img1 = cv2.imread(file1,0) img2 = cv2.imread(file2,0) kp1, desc1 = detector.detectAndCompute(img1, None) kp2, desc2 = detector.detectAndCompute(img2, None) draw_keypoints(img1,kp1) draw_keypoints(img2,kp2) print 'matching...' raw_matches = matcher.knnMatch(desc1, trainDescriptors = desc2, k = 2) #2 p1, p2, kp_pairs = filter_matches(kp1, kp2, raw_matches) if len(p1) >= 4: H, status = cv2.findHomography(p1, p2, cv2.RANSAC, 5.0) print '%d / %d inliers/matched' % (np.sum(status), len(status)) else: H, status = None, None print '%d matches found, not enough for homography estimation' % len(p1) print len(p1), len(p2)
def run(self): direccion = None while not rospy.is_shutdown(): playing = not self.paused and not self.rect_sel.dragging if playing or self.frame is None: #print(self.cv_image) ret = True frame = self.cv_image #print(self.cv_image) #print("**************************** frame") #print(frame) #ret, frame = self.cap.read() if not ret: break self.frame = frame.copy() w, h = getsize(self.frame) vis = np.zeros((h, w*2, 3), np.uint8) vis[:h,:w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:,w:] = target.image draw_keypoints(vis[:,w:], target.keypoints) x0, y0, x1, y1 = target.rect #print(x0,y0,x1,y1) cv2.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2) if playing: tracked = self.tracker.track(self.frame) if len(tracked) > 0: tracked = tracked[0] if not self.reiniciar_exploracion_timer: self.pubNavegacion.publish('STOP') self.reiniciar_exploracion_timer = True rospy.Timer(rospy.Duration(15), self.reiniciar_exploracion) #Aca se imprimen los 4 puntos que genera #print(str(np.int32(tracked.quad[0]))) #print(str(np.int32(tracked.quad[1]))) #print(str(np.int32(tracked.quad[2]))) #print(str(np.int32(tracked.quad[3]))) #Este es el punto medio del poligono que genera. ptoMedio = (np.int32(tracked.quad[0]) + np.int32(tracked.quad[1]) + np.int32(tracked.quad[2]) + np.int32(tracked.quad[3]))/4 direccion = (ptoMedio[0]-320)/-320.0 twist = Twist(Vector3(15,0,0),Vector3(0,0,direccion)) self.pubVel.publish(twist) cv2.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2) for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)): cv2.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0)) else: if self.reiniciar_exploracion_timer: direccion = direccion or 0.5 twist = Twist(Vector3(0 if direccion > 0.2 else 10,0,0),Vector3(0,0, direccion if direccion > 0.2 else 0)) self.pubVel.publish(twist) draw_keypoints(vis, self.tracker.frame_points) self.rect_sel.draw(vis) cv2.imshow('plane', vis) ch = cv2.waitKey(1) if ch == ord(' '): self.paused = not self.paused if ch == 27: break
def run(self): setting_fn = 'setting.json' if myutil.isfile(setting_fn): print('setting exists') self.load_setting(setting_fn) # load preset frame and rect if True and myutil.isfile('h**o.json'): print('preset exists') tmp_frame = self.load_config('h**o.json') #self.frame = tmp_frame print('test: {}'.format( self.distance_to_camera(self.KNOWN_WIDTH, self.focal_length, 135))) while True: playing = not self.paused and not self.rect_sel.dragging if playing or self.frame is None: ret, frame = self.cap.read() if not ret: break self.frame = frame.copy() self.auto_output_frame = frame.copy() w, h = getsize(self.frame) vis = np.zeros((h, w * 2, 3), np.uint8) # if tmp_frame: # vis[:,w:] = tmp_frame vis[:h, :w] = self.frame if len(self.tracker.targets) > 0: target = self.tracker.targets[0] vis[:, w:] = target.image draw_keypoints(vis[:, w:], target.keypoints) x0, y0, x1, y1 = target.rect cv.rectangle(vis, (x0 + w, y0), (x1 + w, y1), (0, 255, 0), 2) is_ok_to_export = False if playing: tracked = self.tracker.track(self.frame) if len(tracked) > 0: tracked = tracked[0] wtf = np.int32(tracked.quad) if self.check_wtf(wtf): self.draw_result(vis, wtf) cv.fillPoly(vis, [wtf], (255, 0, 0)) for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)): cv.line(vis, (x0 + w, y0), (x1, y1), (0, 255, 0)) is_ok_to_export = True if self.auto_save: self.draw_result(self.auto_output_frame, wtf) fn = 'autosave_{:04d}.png'.format(self.auto_serial) self.save_image(fn, self.auto_output_frame) self.auto_serial += 1 draw_keypoints(vis, self.tracker.frame_points) self.rect_sel.draw(vis) cv.imshow(WIN_NAME, vis) ch = cv.waitKey(1) if ch == ord(' '): self.paused = not self.paused elif ch == 27: break elif ch == ord('s'): fn = 'saved_{:04d}.png'.format(self.serial) self.serial += 1 self.save_image(fn, vis)