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)
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)
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)))