class LaserScanner(object): def __init__(self): self.showCamView = True self.showTopView = False self.screenIsFound = False self.captureLaser = False self.cam = OpenCV_Cam() self.screenFinder = ScreenFinder() def findScreen(self): self.screenFinder.clear_found() while not self.screenIsFound: img = self.cam.read() self.screenFinder.find_screen_img(img) cv2.imshow('camera image', img) k = cv2.waitKey(5) if k == 27: break cv2.destroyWindow('camera image') def setScreenImage(self, bgImage): self.screenFinder.set_screen_img(bgImage) self.background = bgImage def capture(self): if self.captureLaser: img = self.cam.read() Xcam = self.getLaserLocation(img) print Xcam #x, y = tuple(self.screenFinder.reverse_transform(Xcam).reshape(-1)) return Xcam def update(self): self.img = self.cam.read() print self.capture() def show(self): cv2.imshow('Burn this image', self.background) if self.showTopView: top_view = sf.screen_top_view(img) cv2.imshow('Top view', top_view) if self.showCamView: cv2.imshow('Cam view', self.img) @staticmethod def getLaserLocation(image): red_part = image[:,:,2] ly, lx = np.unravel_index(red_part.argmax(), red_part.shape) return np.array([lx, ly])
def find_threshold(cam): img = cam.read() hx, hy = find_laser_loc(img, 0) threshold = img[hy, hx, 2] + 10 print "The red threshold is automatically determined to be", threshold return threshold background = cv2.imread('wood.png') cv2.imshow('Burn this page!', background) sf = ScreenFinder() sf.set_screen_img(background) cam = OpenCV_Cam() img = cam.read() sf.find_screen_img(img) sf.find_screen_loop(cam, False) bs = background.shape canvas = np.full((bs[0], bs[1], 4), 0, dtype=np.uint8) # prepare threshold thresh = find_threshold(cam) show_top_view, show_cam_view = False, False while True: img = cam.read() if show_cam_view: cv2.imshow('Cam view', img)
dirName = cwd + "\\"+timestr os.makedirs(dirName) fname= cwd + "\\frame_.png" if os.path.isfile(fname): prevFrame = cv2.imread(fname) #Make .avi file from collected frames fourcc = cv2.cv.CV_FOURCC(*'XVID') video = cv2.VideoWriter(dirName+"\\"+'output_.avi',fourcc, 3.0, cam.size, isColor =True) while True: # Capture frame-by-frame frame = cam.read() # image processing functions # Load the frame into a window named as 'Press any key to exit' if (prevFrame is not None): showFrame = cv2.addWeighted(frame,0.7,prevFrame,0.3,0) else: showFrame = frame resizeShowFrame = cv2.resize(showFrame, (0,0), fx = 0.5, fy = 0.5 ) cv2.imshow('Press ESC to exit', resizeShowFrame) # wait for the key key_code = cv2.waitKey(10)
lower = np.array(lower, dtype="uint8") upper = np.array(upper, dtype="uint8") mask = cv2.inRange(hsv_img, lower, upper) return mask if __name__ == '__main__': cam = OpenCV_Cam() red_bound = ([-5, 150, 0], [15, 255, 255]) green_bound = ([80, 100, 0], [105, 255, 255]) while True: image = cam.read() red_mask = get_mask(image, *red_bound) green_mask = get_mask(image, *green_bound) masks = cv2.bitwise_or(red_mask, green_mask) cv2.imshow('masks', np.hstack([red_mask, green_mask])) output = cv2.bitwise_and(image, image, mask=masks) # show the images cv2.imshow("images", np.hstack([image, output])) k = cv2.waitKey(10) if k == 27: break
def screen_top_view(self, cam_img): shape = (self._screen_img.shape[1], self._screen_img.shape[0]) img = cv2.warpPerspective(cam_img, self.cam2screen_matrix, shape) return img if __name__ == '__main__': sf = ScreenFinder() cam = OpenCV_Cam() cam.size = (640, 480) color_img = cv2.imread('wood.png') img = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY) cv2.imshow('source', color_img) sf.set_screen_img(img) if img.shape[0] * img.shape[1] > cam.size[0] * cam.size[1]: img = cv2.resize(img, cam.size) while True: cam_img = cam.read() if not sf.screen_is_found: sf.find_screen_loop(cam, True) cv2.imshow('top view', sf.screen_top_view(cam_img)) k = cv2.waitKey(5) if k == 27: break elif k == ord('r'): sf.clear_found()
f0, f1, f2 = self.three_frames() d1 = cv2.absdiff(f1, f0) d2 = cv2.absdiff(f2, f1) self.diff = cv2.bitwise_and(d1, d2) def feed_image(self, image): self._index = (self._index + 1) % (2 * self._N) self._frame[self._index] = image self.diff_img() winName = "cam test" cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE) # Read three images first: cam = OpenCV_Cam() md = MotionDetector(N=2, shape=cam.read().shape) while True: md.feed_image(cam.read()) cv2.imshow(winName, md.diff) key = cv2.waitKey(10) if key == 27 or key == 32: md.cam.release() cv2.destroyWindow(winName) break print "Goodbye"
lower = np.array(lower, dtype = "uint8") upper = np.array(upper, dtype = "uint8") mask = cv2.inRange(hsv_img, lower, upper) return mask if __name__ == '__main__': cam = OpenCV_Cam() red_bound = ([-5, 150, 0], [15, 255, 255]) green_bound = ([80, 100, 0], [105, 255, 255]) while True: image = cam.read() red_mask = get_mask(image, *red_bound) green_mask = get_mask(image, *green_bound) masks = cv2.bitwise_or(red_mask, green_mask) cv2.imshow('masks', np.hstack([red_mask, green_mask])) output = cv2.bitwise_and(image, image, mask = masks) # show the images cv2.imshow("images", np.hstack([image, output])) k = cv2.waitKey(10) if k == 27: break
d1 = cv2.absdiff(f1, f0) d2 = cv2.absdiff(f2, f1) self.diff = cv2.bitwise_and(d1, d2) def feed_image(self, image): self._index = (self._index + 1) % (2 * self._N) self._frame[self._index] = image self.diff_img() winName = "cam test" cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE) # Read three images first: cam = OpenCV_Cam() md = MotionDetector(N=2, shape=cam.read().shape) while True: md.feed_image(cam.read()) cv2.imshow(winName, md.diff) key = cv2.waitKey(10) if key == 27 or key == 32: md.cam.release() cv2.destroyWindow(winName) break print "Goodbye"
fname = cwd + "\\frame_.png" if os.path.isfile(fname): prevFrame = cv2.imread(fname) #Make .avi file from collected frames fourcc = cv2.cv.CV_FOURCC(*'XVID') video = cv2.VideoWriter(dirName + "\\" + 'output_.avi', fourcc, 3.0, cam.size, isColor=True) while True: # Capture frame-by-frame frame = cam.read() # image processing functions # Load the frame into a window named as 'Press any key to exit' if (prevFrame is not None): showFrame = cv2.addWeighted(frame, 0.7, prevFrame, 0.3, 0) else: showFrame = frame resizeShowFrame = cv2.resize(showFrame, (0, 0), fx=0.5, fy=0.5) cv2.imshow('Press ESC to exit', resizeShowFrame) # wait for the key key_code = cv2.waitKey(10)
shape = (self._screen_img.shape[1], self._screen_img.shape[0]) print self.cam2screen_matrix img = cv2.warpPerspective(cam_img, self.cam2screen_matrix, shape) return img if __name__ == '__main__': sf = ScreenFinder() cam = OpenCV_Cam() cam.size = (640, 480) color_img = cv2.imread('wood.png') img = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY) cv2.imshow('source', color_img) sf.set_screen_img(img) if img.shape[0] * img.shape[1] > cam.size[0] * cam.size[1]: img = cv2.resize(img, cam.size) while True: cam_img = cam.read() if not sf.screen_is_found: sf.find_screen_loop(cam, True) cv2.imshow('top view', sf.screen_top_view(cam_img)) k = cv2.waitKey(5) if k == 27: break elif k == ord('r'): sf.clear_found()