Esempio n. 1
0
    def onmouse(event, x, y, flags, param):
        cur_vis = vis
        if flags & cv2.EVENT_FLAG_LBUTTON:
            cur_vis = vis0.copy()
            r = 8
            m = (anorm(np.array(p1) -
                       (x, y)) < r) | (anorm(np.array(p2) - (x, y)) < r)
            idxs = np.where(m)[0]
            kp1s, kp2s = [], []
            for i in idxs:
                (x1, y1), (x2, y2) = p1[i], p2[i]
                col = (red, green)[status[i]]
                cv2.line(cur_vis, (x1, y1), (x2, y2), col)
                kp1, kp2 = kp_pairs[i]
                kp1s.append(kp1)
                kp2s.append(kp2)
            cur_vis = cv2.drawKeypoints(cur_vis,
                                        kp1s,
                                        None,
                                        flags=4,
                                        color=kp_color)
            cur_vis[:, w1:] = cv2.drawKeypoints(cur_vis[:, w1:],
                                                kp2s,
                                                None,
                                                flags=4,
                                                color=kp_color)

        cv2.imshow(win, cur_vis)
        '''
        b_channel, g_channel, r_channel = cv2.split(cur_vis)
        alpha_channel = np.ones((cur_vis.shape[0], cur_vis.shape[1]),dtype=np.uint8) #creating a dummy alpha channel image.
        alpha_channel.fill(255)
        img_RGBA = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))
        '''
        send1.send('image', cur_vis)
Esempio n. 2
0
    def onmouse(event, x, y, flags, param):
        cur_vis = vis
        if flags & cv2.EVENT_FLAG_LBUTTON:
            cur_vis = vis0.copy()
            r = 8
            m = (anorm(np.array(p1) -
                       (x, y)) < r) | (anorm(np.array(p2) - (x, y)) < r)
            idxs = np.where(m)[0]
            kp1s, kp2s = [], []
            for i in idxs:
                (x1, y1), (x2, y2) = p1[i], p2[i]
                col = (red, green)[status[i]]
                cv2.line(cur_vis, (x1, y1), (x2, y2), col)
                kp1, kp2 = kp_pairs[i]
                kp1s.append(kp1)
                kp2s.append(kp2)
            cur_vis = cv2.drawKeypoints(cur_vis,
                                        kp1s,
                                        None,
                                        flags=4,
                                        color=kp_color)
            cur_vis[:, w1:] = cv2.drawKeypoints(cur_vis[:, w1:],
                                                kp2s,
                                                None,
                                                flags=4,
                                                color=kp_color)

        cv2.imshow(win, cur_vis)
Esempio n. 3
0
    def onmouse(event, x, y, flags, param):
        #cur_vis = vis
        if flags & cv2.EVENT_FLAG_LBUTTON:
            vis = vis0.copy()
            r = 8
            m = (anorm(p1 - (x, y)) < r) | (anorm(p2 - (x, y)) < r)
            idxs = np.where(m)[0]
            for i in idxs:
                status[i] = not status[i]
            draw_keypoints(vis)
            cv2.imshow(win, vis)

        if flags & cv2.EVENT_RBUTTONDOWN:
            vis = vis0.copy()
            r = 8
            m = (anorm(p1 - (x, y)) < r) | (anorm(p2 - (x, y)) < r)
            idxs = np.where(m)[0]
            kp1s, kp2s = [], []
            for i in idxs:
                 (x1, y1), (x2, y2) = p1[i], p2[i]
                 col = (red, green)[status[i]]
                 cv2.line(vis, (x1, y1), (x2, y2), col)
                 kp1, kp2 = kp_pairs[i]
                 kp1s.append(kp1)
                 kp2s.append(kp2)
            vis = cv2.drawKeypoints(vis, kp1s, flags=4, color=kp_color)
            vis[:,w1:] = cv2.drawKeypoints(vis[:,w1:], kp2s, flags=4, color=kp_color)
            cv2.imshow(win, vis)
Esempio n. 4
0
    def onmouse(event, x, y, flags, param):
        if event & cv2.EVENT_LBUTTONDOWN:
            vis = vis0.copy()
            r = 8
            m = (anorm(p1 - (x, y)) < r) | (anorm(p2 - (x, y)) < r)
            idxs = np.where(m)[0]
            for i in idxs:
                status[i] = not status[i]
            draw_keypoints(vis)
            cv2.imshow(win, vis)

        # what is this supposed to do?  Currently it's broken.
        if event & cv2.EVENT_RBUTTONDOWN:
            vis = vis0.copy()
            r = 8
            m = (anorm(p1 - (x, y)) < r) | (anorm(p2 - (x, y)) < r)
            idxs = np.where(m)[0]
            kp1s, kp2s = [], []
            for i in idxs:
                (x1, y1), (x2, y2) = p1[i], p2[i]
                col = (red, green)[status[i]]
                cv2.line(vis, (x1, y1), (x2, y2), col)
                kp1, kp2 = kp_pairs[i]
                kp1s.append(kp1)
                kp2s.append(kp2)
            vis = cv2.drawKeypoints(vis, kp1s, flags=4, color=kp_color)
            vis[:, w1:] = cv2.drawKeypoints(vis[:, w1:],
                                            kp2s,
                                            flags=4,
                                            color=kp_color)
            cv2.imshow(win, vis)
Esempio n. 5
0
    def onmouse(event, x, y, flags, param):
        cur_vis = vis
        if flags & cv2.EVENT_FLAG_LBUTTON:
            cur_vis = vis0.copy()
            r = 8
            m = (anorm(np.array(p1) - (x, y)) < r) | (anorm(np.array(p2) - (x, y)) < r)
            idxs = np.where(m)[0]
            kp1s, kp2s = [], []
            for i in idxs:
                 (x1, y1), (x2, y2) = p1[i], p2[i]
                 col = (red, green)[status[i]]
                 cv2.line(cur_vis, (x1, y1), (x2, y2), col)
                 kp1, kp2 = kp_pairs[i]
                 kp1s.append(kp1)
                 kp2s.append(kp2)
            cur_vis = cv2.drawKeypoints(cur_vis, kp1s, None, flags=4, color=kp_color)
            cur_vis[:,w1:] = cv2.drawKeypoints(cur_vis[:,w1:], kp2s, None, flags=4, color=kp_color)

        cv2.imshow(win, cur_vis)
        '''
        b_channel, g_channel, r_channel = cv2.split(cur_vis)
        alpha_channel = np.ones((cur_vis.shape[0], cur_vis.shape[1]),dtype=np.uint8) #creating a dummy alpha channel image.
        alpha_channel.fill(255)
        img_RGBA = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))
        '''
        send1.send('image', cur_vis)
Esempio n. 6
0
 def match(self, desc1, desc2):
     res = []
     for i in xrange(len(desc1)):
         dist = anorm( desc2 - desc1[i] )
         n1, n2 = dist.argsort()[:2]
         r = dist[n1] / dist[n2]
         res.append((i, n1, r))
     return res
Esempio n. 7
0
    def onmouse(event, x, y, flags, param):
    cur_vis = vis
    if flags & cv.EVENT_FLAG_LBUTTON:
    cur_vis = vis0.copy() r = 8 m = (anorm(np.array(p1) - (x, y)) < r) | (anorm(np.array(p2) - (x, y)) < r) idxs = np.where(m)[0]

    kp1s, kp2s = [], []
    for i in idxs:
    (x1, y1), (x2, y2) = p1[i], p2[i] col = (red, green)[status[i][0]] cv.line(cur_vis, (x1, y1), (x2, y2), col) kp1, kp2 = kp_pairs[i] kp1s.append(kp1) kp2s.append(kp2) cur_vis = cv.drawKeypoints(cur_vis, kp1s, None, flags = 4, color = kp_color) cur_vis[: , w1: ] = cv.drawKeypoints(cur_vis[: , w1: ], kp2s, None, flags = 4, color = kp_color)

    cv.imshow(win, cur_vis) cv.setMouseCallback(win, onmouse) return vis

    if __name__ == '__main__':
    print(__doc__)

    import sys, getopt opts, args = getopt.getopt(sys.argv[1: ], '', ['feature=']) opts = dict(opts) feature_name = opts.get('--feature', 'brisk') try:
    fn1, fn2 = args except:
    fn1 = '../data/box.png'
    fn2 = '../data/box_in_scene.png'

    img1 = cv.imread(fn1, 0) img2 = cv.imread(fn2, 0) detector, matcher = init_feature(feature_name)

    if img1 is None:
    print('Failed to load fn1:', fn1) sys.exit(1)

    if img2 is None:
    print('Failed to load fn2:', fn2) sys.exit(1)

    if detector is None:
    print('unknown feature:', feature_name) sys.exit(1)

    print('using', feature_name)

    kp1, desc1 = detector.detectAndCompute(img1, None) kp2, desc2 = detector.detectAndCompute(img2, None) print('img1 - %d features, img2 - %d features' % (len(kp1), len(kp2)))

    def match_and_draw(win):
    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 = cv.findHomography(p1, p2, cv.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))

    _vis = explore_match(win, img1, img2, kp_pairs, status, H)

    match_and_draw('find_obj') cv.waitKey()
Esempio n. 8
0
def match(desc1, desc2, r_threshold = 0.75):
    res = []
    for i in xrange(len(desc1)):
        dist = anorm( desc2 - desc1[i] )
        n1, n2 = dist.argsort()[:2]
        r = dist[n1] / dist[n2]
        if r < r_threshold:
            res.append((i, n1))
    return np.array(res)
Esempio n. 9
0
def match_bruteforce(desc1, desc2, r_threshold = 0.75):
    res = []
    for i in xrange(len(desc1)):
        dist = anorm( desc2 - desc1[i] )
        n1, n2 = dist.argsort()[:2]
        r = dist[n1] / dist[n2]
        if r < r_threshold:
            res.append((i, n1))
    return np.array(res)
Esempio n. 10
0
 def onmouse_wait(self, event, x, y, flags):
     if event == cv.CV_EVENT_LBUTTONDOWN:
         d = anorm(self.markers - (x, y))
         if d.min() > 8:
             return
         self.drag_mark_idx = d.argmin()
         self.mouse_state = self.onmouse_drag
     if event == cv.CV_EVENT_RBUTTONDOWN:
         self.markers[:] = self.markers0
         self.update()
Esempio n. 11
0
    def onmouse(event, x, y, flags, param):
        cur_vis = vis
        if flags & cv2.EVENT_FLAG_LBUTTON:
            cur_vis = vis0.copy()
            r = 8
            m = (anorm(np.array(p1) - (x, y)) < r) | (anorm(np.array(p2) - (x, y)) < r)
            idxs = np.where(m)[0]
            kp1s, kp2s = [], []
            for i in idxs:
                 (x1, y1), (x2, y2) = p1[i], p2[i]
                 col = (red, green)[status[i]]
                 cv2.line(cur_vis, (x1, y1), (x2, y2), col)
                 kp1, kp2 = kp_pairs[i]
                 kp1s.append(kp1)
                 kp2s.append(kp2)
            cur_vis = cv2.drawKeypoints(cur_vis, kp1s, None, flags=4, color=kp_color)
            cur_vis[:,w1:] = cv2.drawKeypoints(cur_vis[:,w1:], kp2s, None, flags=4, color=kp_color)

        cv2.imshow(win, cur_vis)
Esempio n. 12
0
    green = (0, 255, 0) red = (0, 0, 255) kp_color = (51, 103, 236) for (x1, y1), (x2, y2), inlier in zip(p1, p2, status):
    if inlier:
    col = green cv.circle(vis, (x1, y1), 2, col, -1) cv.circle(vis, (x2, y2), 2, col, -1)
    else :
      col = red
    r = 2 thickness = 3 cv.line(vis, (x1 - r, y1 - r), (x1 + r, y1 + r), col, thickness) cv.line(vis, (x1 - r, y1 + r), (x1 + r, y1 - r), col, thickness) cv.line(vis, (x2 - r, y2 - r), (x2 + r, y2 + r), col, thickness) cv.line(vis, (x2 - r, y2 + r), (x2 + r, y2 - r), col, thickness) vis0 = vis.copy() for (x1, y1), (x2, y2), inlier in zip(p1, p2, status):
    if inlier:
    cv.line(vis, (x1, y1), (x2, y2), green)

    cv.imshow(win, vis)

    def onmouse(event, x, y, flags, param):
    cur_vis = vis
    if flags & cv.EVENT_FLAG_LBUTTON:
    cur_vis = vis0.copy() r = 8 m = (anorm(np.array(p1) - (x, y)) < r) | (anorm(np.array(p2) - (x, y)) < r) idxs = np.where(m)[0]

    kp1s, kp2s = [], []
    for i in idxs:
    (x1, y1), (x2, y2) = p1[i], p2[i] col = (red, green)[status[i][0]] cv.line(cur_vis, (x1, y1), (x2, y2), col) kp1, kp2 = kp_pairs[i] kp1s.append(kp1) kp2s.append(kp2) cur_vis = cv.drawKeypoints(cur_vis, kp1s, None, flags = 4, color = kp_color) cur_vis[: , w1: ] = cv.drawKeypoints(cur_vis[: , w1: ], kp2s, None, flags = 4, color = kp_color)

    cv.imshow(win, cur_vis) cv.setMouseCallback(win, onmouse) return vis

    if __name__ == '__main__':
    print(__doc__)

    import sys, getopt opts, args = getopt.getopt(sys.argv[1: ], '', ['feature=']) opts = dict(opts) feature_name = opts.get('--feature', 'brisk') try:
    fn1, fn2 = args except:
    fn1 = '../data/box.png'
    fn2 = '../data/box_in_scene.png'
Esempio n. 13
0
cv.CvtColor(frame, gray, cv.CV_BGR2GRAY)
tracks = [ [p] for p in detect(gray) ]


pnum = []

while True:
    prev_gray = cv.CloneMat(gray)
    cv.CvtColor(frame, gray, cv.CV_BGR2GRAY)
    
    rs = random.rand(len(tracks))
    tracks = [tr for tr, r in zip(tracks, rs) if len(tr) < life or r < 0.5]
    p0 = [tr[-1] for tr in tracks]
    p1 = track(prev_gray, gray, p0)
    p0r = track(gray, prev_gray, p1)
    good = (anorm(array(p0)-p0r) < 1.0) 

    if len(p1) > 0:
        new_tracks = []
        for tr, p, good_flag in zip(tracks, p1, good):
            if good_flag:
                tr.append(p)
                new_tracks.append(tr)
        tracks = new_tracks

    cv.Set(mask, 255)
    for x, y in int32(p1):
        cv.Circle(mask, (x, y), 5, 0, -1)
    tracks.extend( [ [p] for p in detect(gray, mask) ] )
    
    vis = cv.CloneImage(frame)#gray2bgr(gray)