Пример #1
0
    def draw_overlay(self, vis):
        AffineWidget.draw_overlay(self, vis)
        if not hasattr(self, 'src_keypoints') or len(self.matches) == 0:
            return


        matches = [(i, j) for i, j, r in self.matches if r < 0.6]
        print '%d / %d matched' % (len(matches), len(self.src_keypoints))
        
        src_vis = gray2bgr(self.src)
        for i, j in matches:
            
            # (x, y), laplacian, size, angle, hessian
            kp0 = self.src_keypoints[i]
            kp1 = self.dst_keypoints[j]

            (sx, sy), size = int32(kp0[0]), kp0[2]
            cv.Circle(src_vis, (sx, sy), size/2, (0, 255, 0), 1, cv.CV_AA)
            (dx, dy), size = int32(kp1[0]), kp1[2]
            cv.Circle(vis, (dx, dy), size/2, (0, 255, 0), 1, cv.CV_AA)
            ex, ey = int32(dot(self.M, (sx, sy, 1)))
            cv.Line(vis, (dx, dy), (ex, ey), (0, 0, 255), 1, cv.CV_AA)

        
        cv.ShowImage('src', src_vis)
Пример #2
0
import cv
import subprocess
from numpy import *

from common import gray2bgr

def detect(img):
    tmp_fn = 'tmp.pgm'
    cv.SaveImage(tmp_fn, img)
    p = subprocess.Popen(['lsd.exe', tmp_fn, '-'], stdout = subprocess.PIPE)
    return fromstring(p.communicate()[0], float32, sep=' ').reshape(-1, 5)
    
    

if __name__ == '__main__':
    import sys
    try: fn = sys.argv[1]
    except: fn = 'images/thai.jpg'

    img = cv.LoadImage(fn, 0)
    sg = detect(img)

    vis = gray2bgr(img)
    for x1, y1, x2, y2, w in int32(sg):
        cv.Line(vis, (x1, y1), (x2, y2), (0, 255, 0), 1, cv.CV_AA)
    
    #cv.NamedWindow('img', 0)
    cv.ShowImage('img', vis)
    cv.WaitKey(0)
Пример #3
0
print len(matches)

p1 = float32( [k1[i][0] for i,j in matches] )
p2 = float32( [k2[j][0] for i,j in matches] )

F = zeros((3, 3), float32)
#status = zeros((1, len(matches)), int8)
status = cv.CreateMat(1, len(matches), cv.CV_8S)
cv.Set(status, 1)
cv.FindFundamentalMat(p1, p2, F, cv.CV_FM_LMEDS, 1.0, 0.99, status)
status = asarray(status)

print F
print sum(status)
                
vis1 = gray2bgr(img1)
vis2 = gray2bgr(img2)

for (i, j), st in zip(matches, status[0]):
    if st == 0:
        continue

    # (x, y), laplacian, size, angle, hessian
    kp0 = k1[i]
    kp1 = k2[j]

    (sx, sy), size = int32(kp0[0]), kp0[2]
    cv.Circle(vis1, (sx, sy), size/2, (0, 255, 0), 1, cv.CV_AA)
    (dx, dy), size = int32(kp1[0]), kp1[2]
    cv.Circle(vis2, (dx, dy), size/2, (0, 255, 0), 1, cv.CV_AA)
    #ex, ey = int32(dot(self.M, (sx, sy, 1)))