int MidiFile::read(const char *fileName) { if (fileName == NULL) return 1; setFileName(fileName); _target = openFile(fileName); if (!_target) return 1; readFileHeader(); setType(); setTrackCount(); setBPM(); for (int i = 0; i < _fileHeader._tracks; i++) { _curTrack = i; readTrack(); printContour(); } fclose(_target); return 0; }
List<Garbage> garbageList(IplImage * src){ cvNamedWindow("output",CV_WINDOW_AUTOSIZE); //frame from video IplImage * src; //object model IplImage * model; if( argc != 2 || (capture=cvCreateFileCapture( argv[1]))== 0 ){ perror("Invalid capture"); return 0; } //image for the histogram-based filter //could be a parameter model=cvLoadImage("../images/colilla-sinBlanco.png",1); CvHistogram * testImageHistogram=getHShistogramFromRGB(model,HIST_H_BINS,HIST_S_BINS); //~ int frameWidth=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH); //~ int frameHeight=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT); //gets a frame for setting image size //CvSize srcSize = cvSize(frameWidth,frameHeight); src=cvQueryFrame(capture); CvSize srcSize = cvGetSize(src); //images for HSV conversion IplImage* hsv = cvCreateImage( srcSize, 8, 3 ); IplImage* h_plane = cvCreateImage( srcSize, 8, 1 ); IplImage* s_plane = cvCreateImage( srcSize, 8, 1 ); IplImage* v_plane = cvCreateImage( srcSize, 8, 1 ); //Image for thresholding IplImage * threshImage=cvCreateImage(srcSize,8,1); //image for equalization IplImage * equalizedImage=cvCreateImage(srcSize,8,1); //image for Morphing operations(Dilate-erode) IplImage * morphImage=cvCreateImage(srcSize,8,1); //image for image smoothing IplImage * smoothImage=cvCreateImage(srcSize,8,1); //image for contour-finding operations IplImage * contourImage=cvCreateImage(srcSize,8,3); int frameCounter=1; int cont_index=0; //convolution kernel for morph operations IplConvKernel* element; CvRect boundingRect; //contours CvSeq ** contours; //Main loop frameCounter++; printf("frame number:%d\n",frameCounter); //convert image to hsv cvCvtColor( src, hsv, CV_BGR2HSV ); cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); //equalize Saturation Channel image cvEqualizeHist(s_plane,equalizedImage); //threshold the equalized Saturation channel image cvThreshold(equalizedImage,threshImage,THRESHOLD_VALUE,255, CV_THRESH_BINARY); //apply morphologic operations element = cvCreateStructuringElementEx( MORPH_KERNEL_SIZE*2+1, MORPH_KERNEL_SIZE*2+1, MORPH_KERNEL_SIZE, MORPH_KERNEL_SIZE, CV_SHAPE_RECT, NULL); cvDilate(threshImage,morphImage,element,MORPH_DILATE_ITER); cvErode(morphImage,morphImage,element,MORPH_ERODE_ITER); //apply smooth gaussian-filter cvSmooth(morphImage,smoothImage,CV_GAUSSIAN,3,0,0,0); //get all contours contours=findContours(smoothImage); cont_index=0; cvCopy(src,contourImage,0); while(contours[cont_index]!=NULL){ CvSeq * aContour=contours[cont_index]; //apply filters if(perimeterFilter(aContour,MINCONTOUR_PERIMETER, MAXCONTOUR_PERIMETER) && //areaFilter(aContour,MINCONTOUR_AREA,MAXCONTOUR_AREA) && rectangularAspectFilter(aContour,CONTOUR_RECTANGULAR_MIN_RATIO, CONTOUR_RECTANGULAR_MAX_RATIO) && boxAreaFilter(aContour,BOXFILTER_TOLERANCE) && histogramMatchingFilter(src,aContour,testImageHistogram, HIST_H_BINS,HIST_S_BINS,HIST_MIN)){ //if passed filters printContour(aContour,3,cvScalar(127,127,0,0), contourImage); //get contour bounding box boundingRect=cvBoundingRect(aContour,0); cvRectangle(contourImage,cvPoint(boundingRect.x,boundingRect.y), cvPoint(boundingRect.x+boundingRect.width, boundingRect.y+boundingRect.height), _GREEN,1,8,0); } cont_index++; } cvShowImage("output",contourImage); cvWaitKey(0); }