def findcontours(iplimage, threshold=100): srcimage = opencv.cvCloneImage(iplimage) # create the storage area and bw image grayscale = opencv.cvCreateImage(opencv.cvGetSize(srcimage), 8, 1) opencv.cvCvtColor(srcimage, grayscale, opencv.CV_BGR2GRAY) #threshold opencv.cvThreshold(grayscale, grayscale, threshold, 255, opencv.CV_THRESH_BINARY) storage = opencv.cvCreateMemStorage(0) opencv.cvClearMemStorage(storage) # find the contours nb_contours, contours = opencv.cvFindContours (grayscale, storage) # comment this out if you do not want approximation contours = opencv.cvApproxPoly (contours, opencv.sizeof_CvContour, storage, opencv.CV_POLY_APPROX_DP, 3, 1) # next line is for ctypes-opencv #contours = opencv.cvApproxPoly (contours, opencv.sizeof(opencv.CvContour), storage, opencv.CV_POLY_APPROX_DP, 3, 1) conts = [] for cont in contours.hrange(): points=[] for pt in cont: points.append((pt.x,pt.y)) conts.append(points) opencv.cvReleaseMemStorage(storage) opencv.cvReleaseImage(srcimage) opencv.cvReleaseImage(grayscale) return (nb_contours, conts)
def findcontours(iplimage, threshold=100): srcimage = opencv.cvCloneImage(iplimage) # create the storage area and bw image grayscale = opencv.cvCreateImage(opencv.cvGetSize(srcimage), 8, 1) opencv.cvCvtColor(srcimage, grayscale, opencv.CV_BGR2GRAY) # threshold opencv.cvThreshold(grayscale, grayscale, threshold, 255, opencv.CV_THRESH_BINARY) storage = opencv.cvCreateMemStorage(0) opencv.cvClearMemStorage(storage) # find the contours nb_contours, contours = opencv.cvFindContours(grayscale, storage) # comment this out if you do not want approximation contours = opencv.cvApproxPoly(contours, opencv.sizeof_CvContour, storage, opencv.CV_POLY_APPROX_DP, 3, 1) # next line is for ctypes-opencv # contours = opencv.cvApproxPoly (contours, opencv.sizeof(opencv.CvContour), storage, opencv.CV_POLY_APPROX_DP, 3, 1) conts = [] for cont in contours.hrange(): points = [] for pt in cont: points.append((pt.x, pt.y)) conts.append(points) opencv.cvReleaseMemStorage(storage) opencv.cvReleaseImage(srcimage) opencv.cvReleaseImage(grayscale) return (nb_contours, conts)
def estaMarcada( marcadog , punto, ancho): sub = cv.GetSubRect(marcadog, (punto[0], punto[1], ancho, ancho)) media = cv.Avg(sub) print "Media para punto"+ str(punto) +": " + str(cv.Avg(sub)) opencv.cvReleaseImage(sub) if media[0] < 250: return True else: return False
def ipl2cairo(iplimage): srcimage = opencv.cvCloneImage(iplimage) width = srcimage.width height = srcimage.height image = opencv.cvCreateImage(opencv.cvGetSize(srcimage), 8, 4) opencv.cvCvtColor(srcimage, image, opencv.CV_BGR2BGRA) buffer = numpy.fromstring(image.imageData, dtype=numpy.uint32).astype(numpy.uint32) buffer.shape = (image.width, image.height) opencv.cvReleaseImage(srcimage) opencv.cvReleaseImage(image) return cairo.ImageSurface.create_for_data(buffer, cairo.FORMAT_RGB24, width, height, width * 4)
def ipl2cairo(iplimage): srcimage = opencv.cvCloneImage(iplimage) width = srcimage.width height = srcimage.height image = opencv.cvCreateImage(opencv.cvGetSize(srcimage),8, 4) opencv.cvCvtColor(srcimage,image,opencv.CV_BGR2BGRA) buffer = numpy.fromstring(image.imageData, dtype=numpy.uint32).astype(numpy.uint32) buffer.shape = (image.width, image.height) opencv.cvReleaseImage(srcimage) opencv.cvReleaseImage(image) return cairo.ImageSurface.create_for_data(buffer, cairo.FORMAT_RGB24, width, height, width*4)
def detectHaar(iplimage, classifier): srcimage = opencv.cvCloneImage(iplimage) grayscale = opencv.cvCreateImage(opencv.cvGetSize(srcimage), 8, 1) opencv.cvCvtColor(srcimage, grayscale, opencv.CV_BGR2GRAY) storage = opencv.cvCreateMemStorage(0) opencv.cvClearMemStorage(storage) opencv.cvEqualizeHist(grayscale, grayscale) try: cascade = opencv.cvLoadHaarClassifierCascade(os.path.join(os.path.dirname(__file__), classifier + ".xml"), opencv.cvSize(1, 1)) except: raise AttributeError("could not load classifier file") objs = opencv.cvHaarDetectObjects(grayscale, cascade, storage, 1.2, 2, opencv.CV_HAAR_DO_CANNY_PRUNING, opencv.cvSize(50, 50)) objects = [] for obj in objs: objects.append(Haarobj(obj)) opencv.cvReleaseImage(srcimage) opencv.cvReleaseImage(grayscale) opencv.cvReleaseMemStorage(storage) return objects
def detectHaar(iplimage, classifier): srcimage = opencv.cvCloneImage(iplimage) grayscale = opencv.cvCreateImage(opencv.cvGetSize(srcimage), 8, 1) opencv.cvCvtColor(srcimage, grayscale, opencv.CV_BGR2GRAY) storage = opencv.cvCreateMemStorage(0) opencv.cvClearMemStorage(storage) opencv.cvEqualizeHist(grayscale, grayscale) try: cascade = opencv.cvLoadHaarClassifierCascade(os.path.join(os.path.dirname(__file__), classifier+".xml"),opencv.cvSize(1,1)) except: raise AttributeError, "could not load classifier file" objs = opencv.cvHaarDetectObjects(grayscale, cascade, storage, 1.2, 2, opencv.CV_HAAR_DO_CANNY_PRUNING, opencv.cvSize(50,50)) objects = [] for obj in objs: objects.append(Haarobj(obj)) opencv.cvReleaseImage(srcimage) opencv.cvReleaseImage(grayscale) opencv.cvReleaseMemStorage(storage) return objects
def puntosParaTemplate (imagen, template): res_width = imagen.width - template.width + 1; res_height = imagen.height - template.height + 1; resultado = cv.CreateImage( ( res_width, res_height ), cv.IPL_DEPTH_32F, 1 ) cv.MatchTemplate(imagen,template,resultado, cv.CV_TM_SQDIFF) pos = [] eig_image = cv.CreateMat(imagen.rows, imagen.cols, cv.CV_32FC1) temp_image = cv.CreateMat(imagen.rows, imagen.cols, cv.CV_32FC1) for (x,y) in cv.GoodFeaturesToTrack(resultado, eig_image, temp_image, 0, 0.2, template.width, useHarris = True): pos.append((x,y)) pos = sorted(pos) opencv.cvReleaseImage(resultado) opencv.cvReleaseImage(eig_image) opencv.cvReleaseImage(temp_image) return pos
puntos_horizontales = puntosParaTemplate (marcado, itemH) print "horizontales: " + str (puntos_horizontales .__len__()) x1 = puntos_horizontales[0][0] y1 = marcado.height-puntos_horizontales[0][1] x2 = puntos_horizontales[1][0] y2 = marcado.height-puntos_horizontales[1][1] rot_mat = cv.CreateMat(2, 3, cv.CV_32F) ang_rad = math.atan((y2-y1)/(x2-x1)) degrees = - (180 * ang_rad / math.pi) cv.GetRotationMatrix2D( (marcado.width/2,marcado.height/2), degrees, 1, rot_mat ); cv.WarpAffine( marcado, marcadog, rot_mat ); opencv.cvReleaseImage(marcado) puntos_horizontales = puntosParaTemplate (marcado, itemH) pos_respuesta = puntosParaTemplate (marcadog, itemP) print "respuestas: " + str (pos_respuesta.__len__()) #print "horizontal: " + str (pos_horizontal.__len__()) #print "sin marcar: " + str (sin_marcar.__len__()) for i in pos_respuesta: # punto1 = (pos_horizontal[0][0] ,i[1] )