def __init__(self, name, size=2, draw_center=True, draw_grid=True, meters_radius=4.0): """ name = name of window meter_radus = 4.0 size = multiple of 400x200 to use for screen meter_radius = how many per metrer """ self.draw_center = draw_center self.draw_grid = draw_grid self.w = (int)(round(size * 400.0)) self.h = (int)(round(size * 200.0)) self.meters_disp = 4.0 #Range in meters of area around robot to display self.laser_win = name self.buffer = cv.cvCreateImage(cv.cvSize(self.w, 2 * self.h), cv.IPL_DEPTH_8U, 3) #print "RobotDisp: window width", self.buffer.width #print "RobotDisp: window height", self.buffer.height self.pixels_per_meter = self.h / self.meters_disp hg.cvNamedWindow(name, hg.CV_WINDOW_AUTOSIZE) hg.cvMoveWindow(name, 0, 50) self.font = cv.cvInitFont(cv.CV_FONT_HERSHEY_PLAIN, as_int(1), as_int(1), 0, 1, cv.CV_AA)
def __link(self): myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) kkk = 0 self.edges = [] for curve in self.allcurve: showpt = [] state = 0 currentPoint = None currentPointIdx = -1 cumulate = 0 dcurve = curve + curve curlen = len(curve) ptcount = 0 pointseq = [] for c in dcurve: if (ptcount > curlen): break cumulate += 1 for kk in range(len(self.points)): k = self.points[kk] if (abs(c.x - k.x) + abs(c.y - k.y) < 15): if (currentPoint != k or cumulate > 40): state += 1 currentPoint = k currentPointIdx = kk cumulate = 0 pointseq.append(kk) if (state > 0): showpt.append([c, state, currentPointIdx]) ptcount += 1 if (state > 1): kkk += 1 cnt = 0 pret = -1 e = None for s, t, cp in showpt: if (cp != pret): if e != None: e.end = cp e = Edge() self.edges.append(e) e.start = cp pret = cp cnt += 1 if (t < state): e.addPoint(s) #print "%d\t%3.2f\t%3.2f\t%d\t%d\t%d" % (kkk, s.x, s.y, cnt, pointseq[t - 1], pointseq[t]) e.end = showpt[-1][2] print >> OUT, "seq\tptn\tx\ty\t" # self.__edgededup() self.__evenSample(self.npoints) for ie, e in enumerate(self.edges): print "P(%d) <-> P(%d) length %d, selected %d" % ( e.start, e.end, len(e.points), len(e.selected)) for d in e.points: cv.cvSet2D(self.drawimg, int(d.y), int(d.x), color[3]) for ip, p in enumerate(e.selected): cv.cvDrawCircle(self.drawimg, p, 2, cv.cvScalar(255, 255, 0, 0)) print >> OUT, "%d\t%d\t%d\t%d" % (ie, ip, p.x, p.y)
def __link(self): myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) kkk = 0 self.edges = [] for curve in self.allcurve: showpt = [] state = 0 currentPoint = None currentPointIdx = -1 cumulate = 0 dcurve = curve + curve curlen = len(curve) ptcount = 0 pointseq = [] for c in dcurve: if (ptcount > curlen): break cumulate += 1 for kk in range(len(self.points)): k = self.points[kk] if (abs(c.x - k.x) + abs(c.y - k.y) < 15): if (currentPoint != k or cumulate > 40): state += 1 currentPoint = k currentPointIdx = kk cumulate = 0 pointseq.append(kk) if (state > 0): showpt.append([c, state, currentPointIdx]) ptcount += 1 if (state > 1): kkk += 1 cnt = 0 pret = -1 e = None for s,t, cp in showpt: if (cp != pret): if e != None: e.end = cp e = Edge() self.edges.append(e) e.start = cp pret = cp cnt += 1 if (t < state): e.addPoint(s) #print "%d\t%3.2f\t%3.2f\t%d\t%d\t%d" % (kkk, s.x, s.y, cnt, pointseq[t - 1], pointseq[t]) e.end = showpt[-1][2] print >> OUT, "seq\tptn\tx\ty\t" # self.__edgededup() self.__evenSample(self.npoints) for ie, e in enumerate(self.edges): print "P(%d) <-> P(%d) length %d, selected %d" % (e.start, e.end, len(e.points), len(e.selected)) for d in e.points: cv.cvSet2D(self.drawimg, int(d.y), int(d.x), color[3]) for ip, p in enumerate(e.selected): cv.cvDrawCircle(self.drawimg, p, 2, cv.cvScalar(255,255,0,0)) print >> OUT, "%d\t%d\t%d\t%d" % (ie, ip, p.x, p.y)
def DrawKeyPoints(self): ic = 0 myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) for ic, c in enumerate(self.mss.seqs): for k in c.points: if self.bDrawNumber: cv.cvPutText( self.drawimg, str(ic), cv.cvPoint(int(k.x), int(k.y)), myfont, cv.cvScalar(255, 255, 0, 0) ) cv.cvDrawCircle(self.drawimg, cv.cvPoint(int(k.x), int(k.y)), 4, cv.cvScalar(255, 0, 255, 0))
def DrawKeyPoints(self): if (not self.drawimg): self.drawimg = cv.cvCloneImage(self.img) myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) ic = 0 for c in self.points: cv.cvPutText(self.drawimg, str(ic), cv.cvPoint(int(c.x), int(c.y)), myfont, cv.cvScalar(255, 255, 0,0)) ic += 1 cv.cvDrawCircle(self.drawimg, c, 4, cv.cvScalar(255,255,0,0))
def DrawKeyPoints(self): if (not self.drawimg): self.drawimg = cv.cvCloneImage(self.img) myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) ic = 0 for c in self.points: cv.cvPutText(self.drawimg, str(ic), cv.cvPoint(int(c.x), int(c.y)), myfont, cv.cvScalar(255, 255, 0, 0)) ic += 1 cv.cvDrawCircle(self.drawimg, c, 4, cv.cvScalar(255, 255, 0, 0))
def DrawKeyPoints(self): ic = 0 myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) for ic, c in enumerate(self.mss.seqs): cnt = 0 for k in c.points: cnt += 1 if (int(cnt/2) * 2 != cnt): continue cv.cvDrawCircle(self.drawimg, cv.cvPoint(int(k.x), int(k.y)), 4, cv.cvScalar(255,255,255,0)) if (self.bDrawNumber and (cnt > self.start) and cnt < self.start + 8*4 and len(c.points) > 30): #cv.cvPutText(self.drawimg, str(cnt), cv.cvPoint(int(k.x) + 5, int(k.y)), myfont, cv.cvScalar(255, 255, 0,0)) cv.cvDrawCircle(self.drawimg, cv.cvPoint(int(k.x), int(k.y)), 4, cv.cvScalar(255,0, 255,0))
def main(): # ctrl+c to end global h,s,v,h2,v2,s2,d,e highgui.cvNamedWindow("Camera 1", 1) highgui.cvNamedWindow("Orig", 1) highgui.cvCreateTrackbar("H", "Camera 1", h, 256, tb_h) highgui.cvCreateTrackbar("S", "Camera 1", s, 256, tb_s) highgui.cvCreateTrackbar("V", "Camera 1", v, 256, tb_v) highgui.cvCreateTrackbar("H2", "Camera 1", h2, 256, tb_h2) highgui.cvCreateTrackbar("S2", "Camera 1", s2, 256, tb_s2) highgui.cvCreateTrackbar("V2", "Camera 1", v2, 256, tb_v2) highgui.cvCreateTrackbar("Dilate", "Camera 1", d, 30, tb_d) highgui.cvCreateTrackbar("Erode", "Camera 1", e, 30, tb_e) cap = highgui.cvCreateCameraCapture(1) highgui.cvSetCaptureProperty(cap, highgui.CV_CAP_PROP_FRAME_WIDTH, IMGW) highgui.cvSetCaptureProperty(cap, highgui.CV_CAP_PROP_FRAME_HEIGHT, IMGH) c = 0 t1 = tdraw = time.clock() t = 1 font = cv.cvInitFont(cv.CV_FONT_HERSHEY_PLAIN, 1, 1) while c != 0x27: image = highgui.cvQueryFrame(cap) if not image: print "capture failed" break thresh = cv.cvCreateImage(cv.cvSize(IMGW,IMGH),8,1) cv.cvSetZero(thresh) cv.cvCvtColor(image,image,cv.CV_RGB2HSV) cv.cvInRangeS(image, (h,s,v,0), (h2,s2,v2,0), thresh) result = cv.cvCreateImage(cv.cvSize(IMGW,IMGH),8,3) cv.cvSetZero(result) cv.cvOr(image,image,result,thresh) for i in range(1,e): cv.cvErode(result,result) for i in range(1,d): cv.cvDilate(result,result) # floodfill objects back in, allowing threshold differences outwards t2 = time.clock() if t2 > tdraw+0.3: t = t2-t1 tdraw=t2 cv.cvPutText(result, "FPS: " + str(1 / (t)), (0,25), font, (255,255,255)) t1 = t2 highgui.cvShowImage("Orig", image) highgui.cvShowImage("Camera 1", result) c = highgui.cvWaitKey(10)
def getBackground(frameWidht, frameHeight): cvNamedWindow("Background") text = cvCreateImage(cvSize(frameWidth, frameHeight), IPL_DEPTH_8U, 3) frame = cvCreateImage(cvSize(frameWidth, frameHeight), IPL_DEPTH_8U, 3) background = cvCreateImage(cvSize(frameWidth, frameHeight), IPL_DEPTH_8U, 3) font = cvInitFont(CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0, 0.0, 2) pt1 = cvPoint(50, 100) pt2 = cvPoint(50, 150) center = cvPoint(frameWidth/2, frameHeight/2) cvPutText(text, "Press enter, run away and wait", pt1, font, CV_RGB(150, 100, 150)) cvPutText(text, str(delayS) + " seconds to capture background", pt2, font, CV_RGB(150, 100, 150)) cvShowImage("Background", text) key = -1 while key == -1: key = cvWaitKey(10) like = False while not like: for i in range(delayS): cvZero(text) cvPutText(text, str(delayS-i), center, font, CV_RGB(150, 100, 150)) cvShowImage("Background", text) cvWaitKey(1000) csut = camStartUpTime while (csut): # Stats capturing frames in order to give time to the cam to auto-adjust colors if not cvGrabFrame(CAM): print "Could not grab a frame" exit cvWaitKey(10) csut -= 1 frame = cvQueryFrame(CAM) cvCopy(frame, background) cvCopy(frame, text) cvPutText(text, "Is correct? [y/n]", center, font, CV_RGB(150, 100, 150)) cvShowImage("Background", text) key = -1 while key != 'n' and key != 'y': key = cvWaitKey(10) if key == 'y': like = True return background cvDestroyWindow("Background")
def __init__(self, name, size=2, draw_center=True, draw_grid=True, meters_radius=4.0): """ name = name of window meter_radus = 4.0 size = multiple of 400x200 to use for screen meter_radius = how many per metrer """ self.draw_center = draw_center self.draw_grid = draw_grid self.w = (int) (round(size * 400.0)) self.h = (int) (round(size * 200.0)) self.meters_disp = 4.0 #Range in meters of area around robot to display self.laser_win = name self.buffer = cv.cvCreateImage(cv.cvSize(self.w, 2*self.h), cv.IPL_DEPTH_8U, 3) #print "RobotDisp: window width", self.buffer.width #print "RobotDisp: window height", self.buffer.height self.pixels_per_meter = self.h / self.meters_disp hg.cvNamedWindow(name, hg.CV_WINDOW_AUTOSIZE) hg.cvMoveWindow(name, 0, 50) self.font = cv.cvInitFont(cv.CV_FONT_HERSHEY_PLAIN, as_int(1), as_int(1), 0, 1, cv.CV_AA)
def main(): ct1 = CurvePoint() ct2 = CurvePoint() sc = CntSC() ang = CntAngle() usage = "%prog [options] <imgfile1> <imgfile2>" version = "%prog 0.2\nLongbin Chen, [email protected]" oparser = optparse.OptionParser(usage=usage, version=version) oparser.add_option('-d', '--display', action="store_true", dest = 'display', default = False, help = 'display the image') oparser.add_option('-n', '--number', dest = 'num', type="int", default = 200 , help = 'the number of feature points') oparser.add_option('-s', '--save', dest = 'save', default = None, help = 'save the img file') oparser.add_option('-o', '--output', dest = 'output', default = None, help = 'output file') (options, args) = oparser.parse_args(sys.argv) if len(args) != 3: oparser.parse_args([sys.argv[0], "--help"]) sys.exit(1) ct1.GetContour(args[1], options.num) allkeys = [] for c in ct1.allselected: allkeys = allkeys + c sc.ExtractFeature(allkeys) ang.ExtractFeature(allkeys,0); allkeys = [] ct2.GetContour(args[2], options.num) for c in ct2.allselected: allkeys = allkeys + c sc.ExtractFeature(allkeys) ang.ExtractFeature(allkeys,0); sumscore = [] matcher = SmithWaterman() ct1.bDrawNumber = 0 ct2.bDrawNumber = 0 if (options.display): ct1.DrawKeyPoints() ct2.DrawKeyPoints() myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) idx = -1 putoriginal(args[1], ct1.drawimg) putoriginal(args[2], ct2.drawimg) cv.cvNot(ct1.drawimg, ct1.drawimg) cv.cvNot(ct2.drawimg, ct2.drawimg) for c1 in ct1.allselected: idx += 1 cscore = -100000000 cpt1 = getdata(c1) bX = [] bY = [] bestcurve = None for c2 in ct2.allselected: cpt2 = getdata(c2) cost,align,X,Y = matcher.Align(cpt1, cpt2) normalized_score = cost - log10(len(c2) + 1) * 1000 print len(c1), len(c2),cost, normalized_score, cscore if (normalized_score > cscore): cscore = normalized_score bX = X[:] bY = Y[:] bestcurve = c2 if (options.display): ptcount = 0 for i in range(len(bX)): xi = bX[i] yi = bY[i] #if (xi == -1): #cv.cvDrawCircle(ct2.drawimg, cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)),4, cv.cvScalar(255,0,0,0)) #cv.cvPutText(ct2.drawimg, 'O', cv.cvPoint(int(c2[yi].x), int(c2[yi].y)), myfont, cv.cvScalar(255, 0, 0,0)) #if (yi == -1): #cv.cvDrawCircle(ct1.drawimg, cv.cvPoint(int(c1[xi].x), int(c1[xi].y)),4, cv.cvScalar(255,0,0,0)) #cv.cvPutText(ct1.drawimg, 'O', cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), myfont, cv.cvScalar(255, 0, 0,0)) if (xi != -1 and yi != -1): ptcount += 1 cv.cvDrawCircle(ct1.drawimg, cv.cvPoint(int(c1[xi].x), int(c1[xi].y)),2, clrs[idx]) cv.cvPutText(ct1.drawimg, str(ptcount), cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), myfont, clrs[idx]) cv.cvDrawCircle(ct2.drawimg, cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)),2, clrs[idx]) cv.cvPutText(ct2.drawimg, str(ptcount), cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)), myfont, clrs[idx]) sumscore.append(cscore) print sumscore if (options.display): highgui.cvNamedWindow ("contour1", 1) highgui.cvNamedWindow ("contour2", 1) highgui.cvShowImage ("contour1", ct1.drawimg) highgui.cvShowImage ("contour2", ct2.drawimg) highgui.cvWaitKey (0) if (options.save): mergeimg = mergeimage_83(ct1.drawimg, ct2.drawimg) highgui.cvSaveImage("_sw_result.bmp", mergeimg)
y = j*precision depth = depthmatch(x+precision_pixels/2, y+precision_pixels/2, leftimage, rightimage, roi=precision_pixels, buf=precision_pixels*2) #print i, j # fill in result matrix if mask wasn't 0 at this point (X,Y,Z) cv.cvSetReal2D(matx, j, i, int(depth[0][0])) cv.cvSetReal2D(maty, j, i, int(depth[0][1])) cv.cvSetReal2D(matz, j, i, int(depth[0][2])) return matz test_number = 2 if __name__ == "__main__" and test_number == 1: left = highgui.cvLoadImage(str(sys.argv[1])) right = highgui.cvLoadImage(str(sys.argv[2])) size = cv.cvGetSize(left) #depth = depthmatrix(left, right) font = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) highgui.cvNamedWindow("depthmatch - left") highgui.cvNamedWindow("depthmatch - right") xmatch = 0 ymatch = 0 variable_roi = 20 variable_buf = 10 variable_focal = 100 variable_base = 2.7 def mousecb(e,x,y,f,p): global xmatch, ymatch if highgui.CV_EVENT_LBUTTONDOWN == e: xmatch = x ymatch = y def cb_roi(v): global variable_roi
def main(): ct1 = CurvePoint() ct2 = CurvePoint() agl = CntAngle() sc = CntSC() try: opts, args = getopt.getopt(sys.argv[1:], "ho:dn:es", ["help", "output=", "draw", "num=", "even", "save"]) except getopt.GetoptError: usage() sys.exit(2) output = None bDraw = 0 bSave = 0 bOriginal = 0 npoint = 100 for o, a in opts: if o == "-v": ct1.verbose = 1 ct2.verbose = 1 if o in ("-h", "--help"): usage() sys.exit() if o in ("-o", "--output"): output = a if o in ("-d", "--draw"): bDraw = 1 if o in ("-s", "--save"): bSave = 1 if o in ("-r", "--original"): bOriginal = 1 if o in ("-n", "--num"): npoint = string.atoi(a) if o in ("-e", "--even"): ct1.bEven = 1 ct2.bEven = 1 if (len(args)) != 2: usage() sys.exit(2) ct1.GetContour(args[0], npoint) allkeys = [] for c in ct1.allselected: # agl.ExtractFeature(c, ct1.drawimg) allkeys = allkeys + c sc.ExtractFeature(allkeys) allkeys = [] ct2.GetContour(args[1], npoint) for c in ct2.allselected: # agl.ExtractFeature(c, ct2.drawimg) allkeys = allkeys + c sc.ExtractFeature(allkeys) sumscore = [] matcher = SmithWaterman() ct1.bDrawNumber = 0 ct2.bDrawNumber = 0 if bDraw: ct1.DrawKeyPoints() ct2.DrawKeyPoints() myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) idx = -1 putoriginal(args[0], ct1.drawimg) putoriginal(args[1], ct2.drawimg) cv.cvNot(ct1.drawimg, ct1.drawimg) cv.cvNot(ct2.drawimg, ct2.drawimg) for c1 in ct1.allselected: idx += 1 cscore = -100000000 cpt1 = getdata(c1) bX = [] bY = [] bestcurve = None for c2 in ct2.allselected: cpt2 = getdata(c2) cost, align, X, Y = matcher.Align(cpt1, cpt2) normalized_score = cost - log10(len(c2) + 1) * 1000 print len(c1), len(c2), cost, normalized_score, cscore if normalized_score > cscore: cscore = normalized_score bX = X[:] bY = Y[:] bestcurve = c2 if bDraw: ptcount = 0 for i in range(len(bX)): xi = bX[i] yi = bY[i] # if (xi == -1): # cv.cvDrawCircle(ct2.drawimg, cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)),4, cv.cvScalar(255,0,0,0)) # cv.cvPutText(ct2.drawimg, 'O', cv.cvPoint(int(c2[yi].x), int(c2[yi].y)), myfont, cv.cvScalar(255, 0, 0,0)) # if (yi == -1): # cv.cvDrawCircle(ct1.drawimg, cv.cvPoint(int(c1[xi].x), int(c1[xi].y)),4, cv.cvScalar(255,0,0,0)) # cv.cvPutText(ct1.drawimg, 'O', cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), myfont, cv.cvScalar(255, 0, 0,0)) if xi != -1 and yi != -1: ptcount += 1 cv.cvDrawCircle(ct1.drawimg, cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), 2, clrs[idx]) cv.cvPutText(ct1.drawimg, str(ptcount), cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), myfont, clrs[idx]) cv.cvDrawCircle(ct2.drawimg, cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)), 2, clrs[idx]) cv.cvPutText( ct2.drawimg, str(ptcount), cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)), myfont, clrs[idx], ) sumscore.append(cscore) print sumscore if bDraw: highgui.cvNamedWindow("contour1", 1) highgui.cvNamedWindow("contour2", 1) highgui.cvShowImage("contour1", ct1.drawimg) highgui.cvShowImage("contour2", ct2.drawimg) highgui.cvWaitKey(0) if bSave: mergeimg = mergeimage_83(ct1.drawimg, ct2.drawimg) highgui.cvSaveImage("_sw_result.bmp", mergeimg)
random.randrange (-height, 2 * height)) cv.cvCircle (image, pt1, random.randrange (0, 300), random_color (random), random.randrange (-1, 9), line_type, 0) highgui.cvShowImage (window_name, image) highgui.cvWaitKey (delay) # draw some text for i in range (number): pt1 = cv.cvPoint (random.randrange (-width, 2 * width), random.randrange (-height, 2 * height)) font = cv.cvInitFont (random.randrange (0, 8), random.randrange (0, 100) * 0.05 + 0.01, random.randrange (0, 100) * 0.05 + 0.01, random.randrange (0, 5) * 0.1, random.randrange (0, 10), line_type) cv.cvPutText (image, "Testing text rendering!", pt1, font, random_color (random)) highgui.cvShowImage (window_name, image) highgui.cvWaitKey (delay) # prepare a text, and get it's properties font = cv.cvInitFont (cv.CV_FONT_HERSHEY_COMPLEX, 3, 3, 0.0, 5, line_type) text_size, ymin = cv.cvGetTextSize ("OpenCV forever!", font) pt1.x = (width - text_size.width) / 2
import sys sys.path.append('/usr/local/lib64/python2.6/site-packages') import stereo from opencv import highgui,cv font = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0) def depthmatch(x,y,leftimage,rightimage,roi=20,buf=10,debug=False): __doc__ = """depthmatch function x,y : (int) pixel position of target in left image leftimage, rightimage : (IplImage) stereo images roi: (int) region of interest around x,y to use in matching buf: (int) buffer outside of a straight horizontal search for a match """ info = cv.cvGetSize(leftimage) width = info.width height = info.height (y1,x1,y2,x2) = (y-roi,x-roi,y+roi,x+roi) #template = cv.cvCreateImage((roi*2,roi*2), 8, 3) if y1<0: y1 = 0 if x1<0: x1 = 0 if y2>height: y2 = height if x2>width: x2 = width #cv.cvSetZero(template) # copy subregion roi x roi template_rect = cv.cvRect(x1,y1,(x2-x1),(y2-y1)) template = cv.cvGetSubRect(leftimage, template_rect) (y3,x3,y4,x4) = (y-roi-buf,x-roi-buf,y+roi+buf,width) # +/- 20 pixels in vertical direction, -20 to the right edge if x3<0: x3 = 0
def main(): ct1 = CurvePoint() ct2 = CurvePoint() sc = CntSC() ang = CntAngle() usage = "%prog [options] <imgfile1> <imgfile2>" version = "%prog 0.2\nLongbin Chen, [email protected]" oparser = optparse.OptionParser(usage=usage, version=version) oparser.add_option('-d', '--display', action="store_true", dest='display', default=False, help='display the image') oparser.add_option('-n', '--number', dest='num', type="int", default=200, help='the number of feature points') oparser.add_option('-s', '--save', dest='save', default=None, help='save the img file') oparser.add_option('-o', '--output', dest='output', default=None, help='output file') (options, args) = oparser.parse_args(sys.argv) if len(args) != 3: oparser.parse_args([sys.argv[0], "--help"]) sys.exit(1) ct1.GetContour(args[1], options.num) allkeys = [] for c in ct1.allselected: allkeys = allkeys + c sc.ExtractFeature(allkeys) ang.ExtractFeature(allkeys, 0) allkeys = [] ct2.GetContour(args[2], options.num) for c in ct2.allselected: allkeys = allkeys + c sc.ExtractFeature(allkeys) ang.ExtractFeature(allkeys, 0) sumscore = [] matcher = SmithWaterman() ct1.bDrawNumber = 0 ct2.bDrawNumber = 0 if (options.display): ct1.DrawKeyPoints() ct2.DrawKeyPoints() myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) idx = -1 putoriginal(args[1], ct1.drawimg) putoriginal(args[2], ct2.drawimg) cv.cvNot(ct1.drawimg, ct1.drawimg) cv.cvNot(ct2.drawimg, ct2.drawimg) for c1 in ct1.allselected: idx += 1 cscore = -100000000 cpt1 = getdata(c1) bX = [] bY = [] bestcurve = None for c2 in ct2.allselected: cpt2 = getdata(c2) cost, align, X, Y = matcher.Align(cpt1, cpt2) normalized_score = cost - log10(len(c2) + 1) * 1000 print len(c1), len(c2), cost, normalized_score, cscore if (normalized_score > cscore): cscore = normalized_score bX = X[:] bY = Y[:] bestcurve = c2 if (options.display): ptcount = 0 for i in range(len(bX)): xi = bX[i] yi = bY[i] #if (xi == -1): #cv.cvDrawCircle(ct2.drawimg, cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)),4, cv.cvScalar(255,0,0,0)) #cv.cvPutText(ct2.drawimg, 'O', cv.cvPoint(int(c2[yi].x), int(c2[yi].y)), myfont, cv.cvScalar(255, 0, 0,0)) #if (yi == -1): #cv.cvDrawCircle(ct1.drawimg, cv.cvPoint(int(c1[xi].x), int(c1[xi].y)),4, cv.cvScalar(255,0,0,0)) #cv.cvPutText(ct1.drawimg, 'O', cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), myfont, cv.cvScalar(255, 0, 0,0)) if (xi != -1 and yi != -1): ptcount += 1 cv.cvDrawCircle(ct1.drawimg, cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), 2, clrs[idx]) cv.cvPutText(ct1.drawimg, str(ptcount), cv.cvPoint(int(c1[xi].x), int(c1[xi].y)), myfont, clrs[idx]) cv.cvDrawCircle( ct2.drawimg, cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)), 2, clrs[idx]) cv.cvPutText( ct2.drawimg, str(ptcount), cv.cvPoint(int(bestcurve[yi].x), int(bestcurve[yi].y)), myfont, clrs[idx]) sumscore.append(cscore) print sumscore if (options.display): highgui.cvNamedWindow("contour1", 1) highgui.cvNamedWindow("contour2", 1) highgui.cvShowImage("contour1", ct1.drawimg) highgui.cvShowImage("contour2", ct2.drawimg) highgui.cvWaitKey(0) if (options.save): mergeimg = mergeimage_83(ct1.drawimg, ct2.drawimg) highgui.cvSaveImage("_sw_result.bmp", mergeimg)
set_gain) #highgui.cvCreateTrackbar ("param lissage", "3-lisser", 3, 3, set_param_liss) #highgui.cvCreateTrackbar ("param 2 lissage", "3-lisser", 1, 10, set_param2_liss) ############################# GO WORK ###################################### frame = highgui.cvQueryFrame(capture) frame_size = cv.cvGetSize(frame) hauteur_image = cv.cvGetSize(frame).height largeur_image = cv.cvGetSize(frame).width print "hauteur_image:" + str(hauteur_image) + " largeur_image:" + str( largeur_image) + " depth:" + str(frame.depth) print "frame per seconds : " + str(highgui.CV_CAP_PROP_FPS) print "" font = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0) frameGray = cv.cvCreateImage(frame_size, frame.depth, 1) ##frameGrayBg = cv.cvCreateImage (frame_size, frame.depth, 1) framewithoutbg = cv.cvCreateImage(frame_size, frame.depth, 1) framemul = cv.cvCreateImage(frame_size, frame.depth, 1) framelisser = cv.cvCreateImage(frame_size, frame.depth, 1) frameBin = cv.cvCreateImage(frame_size, frame.depth, 1) framelisser1 = cv.cvCreateImage(frame_size, frame.depth, 1) framelisser2 = cv.cvCreateImage(frame_size, frame.depth, 1) mess_saved = 0 first = 1 first2 = 1 # Xlib init , cf : Control Periph
def main(): ct1 = CntPoint() ct2 = CntPoint() agl = CntAngle() das = CntDAS() das.bDraw = 0 try: opts, args = getopt.getopt(sys.argv[1:], "ho:dn:e", ["help", "output=", "draw", "num=", "even"]) except getopt.GetoptError: usage() sys.exit(2) output = None bDraw = 0 npoint = 100 for o, a in opts: if o == "-v": ct.verbose = 1 if o in ("-h", "--help"): usage() sys.exit() if o in ("-o", "--output"): output = a if o in ("-d", "--draw"): bDraw = 1 if o in ("-n", "--num"): npoint = string.atoi(a) if o in ("-e", "--even"): ct.bEven = 1 if (len(args)) != 2: usage() sys.exit(2) ct1.GetContour(args[0], npoint) agl.ExtractFeature(ct1.GetKeyPoints(), ct1.drawimg) das.ExtractFeature(ct1.GetKeyPoints(), ct1.drawimg) ct2.GetContour(args[1], npoint) agl.ExtractFeature(ct2.GetKeyPoints(), ct2.drawimg) das.ExtractFeature(ct2.GetKeyPoints(), ct2.drawimg) seq1 = getdata(ct1.GetKeyPoints()) seq2 = getdata(ct2.GetKeyPoints()) matcher = SmithWaterman() cost, align, X, Y = matcher.Align(seq1, seq2) myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) if (bDraw): ct1.DrawKeyPoints() kpoints1 = ct1.GetKeyPoints() ct2.DrawKeyPoints() kpoints2 = ct2.GetKeyPoints() ptcount = 0 for i in range(len(X)): xi = X[i] yi = Y[i] if (xi == -1): cv.cvPutText( ct2.drawimg, 'O', cv.cvPoint(int(kpoints2[yi].x), int(kpoints2[yi].y)), myfont, cv.cvScalar(255, 0, 0, 0)) if (yi == -1): cv.cvPutText( ct1.drawimg, 'O', cv.cvPoint(int(kpoints1[xi].x), int(kpoints1[xi].y)), myfont, cv.cvScalar(255, 0, 0, 0)) if (xi != -1 and yi != -1): ptcount += 1 cv.cvPutText( ct1.drawimg, str(ptcount), cv.cvPoint(int(kpoints1[xi].x), int(kpoints1[xi].y)), myfont, cv.cvScalar(255, 255, 0, 0)) cv.cvPutText( ct2.drawimg, str(ptcount), cv.cvPoint(int(kpoints2[yi].x), int(kpoints2[yi].y)), myfont, cv.cvScalar(255, 255, 0, 0)) highgui.cvNamedWindow("contour1", 1) highgui.cvNamedWindow("contour2", 1) highgui.cvShowImage("contour1", ct1.drawimg) highgui.cvShowImage("contour2", ct2.drawimg) highgui.cvWaitKey(0)
def main(): ct1 = CntPoint() ct2 = CntPoint() agl = CntAngle() das = CntDAS() das.bDraw = 0 try: opts, args = getopt.getopt(sys.argv[1:], "ho:dn:e", ["help", "output=", "draw", "num=", "even"]) except getopt.GetoptError: usage() sys.exit(2) output = None bDraw = 0 npoint = 100 for o, a in opts: if o == "-v": ct.verbose = 1 if o in ("-h", "--help"): usage() sys.exit() if o in ("-o", "--output"): output = a if o in ("-d", "--draw"): bDraw = 1 if o in ("-n", "--num"): npoint = string.atoi(a) if o in ("-e", "--even"): ct.bEven = 1 if (len(args)) != 2: usage() sys.exit(2) ct1.GetContour(args[0], npoint) agl.ExtractFeature(ct1.GetKeyPoints(), ct1.drawimg) das.ExtractFeature(ct1.GetKeyPoints(), ct1.drawimg) ct2.GetContour(args[1], npoint) agl.ExtractFeature(ct2.GetKeyPoints(), ct2.drawimg) das.ExtractFeature(ct2.GetKeyPoints(), ct2.drawimg) seq1 = getdata(ct1.GetKeyPoints()) seq2 = getdata(ct2.GetKeyPoints()) matcher = SmithWaterman() cost,align,X,Y = matcher.Align(seq1, seq2) myfont = cv.cvInitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5) if (bDraw): ct1.DrawKeyPoints() kpoints1 = ct1.GetKeyPoints() ct2.DrawKeyPoints() kpoints2 = ct2.GetKeyPoints() ptcount = 0 for i in range(len(X)): xi = X[i] yi = Y[i] if (xi == -1): cv.cvPutText(ct2.drawimg, 'O', cv.cvPoint(int(kpoints2[yi].x), int(kpoints2[yi].y)), myfont, cv.cvScalar(255, 0, 0,0)) if (yi == -1): cv.cvPutText(ct1.drawimg, 'O', cv.cvPoint(int(kpoints1[xi].x), int(kpoints1[xi].y)), myfont, cv.cvScalar(255, 0, 0,0)) if (xi != -1 and yi != -1): ptcount += 1 cv.cvPutText(ct1.drawimg, str(ptcount), cv.cvPoint(int(kpoints1[xi].x), int(kpoints1[xi].y)), myfont, cv.cvScalar(255, 255, 0,0)) cv.cvPutText(ct2.drawimg, str(ptcount), cv.cvPoint(int(kpoints2[yi].x), int(kpoints2[yi].y)), myfont, cv.cvScalar(255, 255, 0,0)) highgui.cvNamedWindow ("contour1", 1) highgui.cvNamedWindow ("contour2", 1) highgui.cvShowImage ("contour1", ct1.drawimg) highgui.cvShowImage ("contour2", ct2.drawimg) highgui.cvWaitKey (0)