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])
Example #2
0
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)
Example #3
0
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)
Example #4
0
    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
Example #5
0
    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()
Example #6
0
        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"
Example #7
0
    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
Example #8
0
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)
Example #9
0
        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"
Example #10
0
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()