From ba994f4404b6eadcab4e0ead46ef4d3ffeceb024 Mon Sep 17 00:00:00 2001 From: Antoine Villeret Date: Thu, 10 Jul 2014 14:39:22 +0000 Subject: lots of changes ! 1. switch to a new build system based on automake (because we need to check for some lib on ./configure before make) 2. sort files in different directory 3. add some new features (some of them need OpenCV >= 2.4.5) svn path=/trunk/externals/pix_opencv/; revision=17324 --- pix_opencv_hist_compare.cc | 533 --------------------------------------------- 1 file changed, 533 deletions(-) delete mode 100644 pix_opencv_hist_compare.cc (limited to 'pix_opencv_hist_compare.cc') diff --git a/pix_opencv_hist_compare.cc b/pix_opencv_hist_compare.cc deleted file mode 100644 index ccdb50c..0000000 --- a/pix_opencv_hist_compare.cc +++ /dev/null @@ -1,533 +0,0 @@ -//////////////////////////////////////////////////////// -// -// GEM - Graphics Environment for Multimedia -// -// zmoelnig@iem.kug.ac.at -// -// Implementation file -// -// Copyright (c) 1997-2000 Mark Danks. -// Copyright (c) Günther Geiger. -// Copyright (c) 2001-2002 IOhannes m zmoelnig. forum::für::umläute. IEM -// Copyright (c) 2002 James Tittle & Chris Clepper -// For information on usage and redistribution, and for a DISCLAIMER OF ALL -// WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution. -// -///////////////////////////////////////////////////////// - -#include "pix_opencv_hist_compare.h" - -CPPEXTERN_NEW(pix_opencv_hist_compare) - -///////////////////////////////////////////////////////// -// -// pix_opencv_hist_compare -// -///////////////////////////////////////////////////////// -// Constructor -// -///////////////////////////////////////////////////////// - -pix_opencv_hist_compare :: pix_opencv_hist_compare() -{ - int i; - - comp_xsize=320; - comp_ysize=240; - - inlet_new(this->x_obj, &this->x_obj->ob_pd, gensym("float"), gensym("save")); - m_dataout = outlet_new(this->x_obj, &s_anything); - m_measureout = outlet_new(this->x_obj, &s_anything); - - save_now = 0; - - rgba = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 4); - rgb = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3); - grey = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - hsv = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3 ); - - h_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - planes[0] = h_plane; - planes[1] = s_plane; - h_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - saved_planes[0] = h_saved_plane; - saved_planes[1] = s_saved_plane; - - int h_bins = (int)(comp_xsize/10), s_bins = (int)(comp_ysize/10); - { - int hist_size[] = { h_bins, s_bins }; - float h_ranges[] = { 0, 180 }; // hue is [0,180] - float s_ranges[] = { 0, 255 }; - float* ranges[] = { h_ranges, s_ranges }; - hist = cvCreateHist( - 2, - hist_size, - CV_HIST_ARRAY, - ranges, - 1 - ); - int n; - for (n=0; ncomp_xsize!=image.xsize)&&(this->comp_ysize!=image.ysize)) { - - this->comp_xsize=image.xsize; - this->comp_ysize=image.ysize; - - post( "pix_opencv_hist_compare : reallocating buffers" ); - - //Destroy cv_images to clean memory - cvReleaseImage(&rgba); - cvReleaseImage(&rgb); - cvReleaseImage(&grey); - cvReleaseImage(&h_plane); - cvReleaseImage(&s_plane); - cvReleaseImage(&v_plane); - cvReleaseImage(&h_saved_plane); - cvReleaseImage(&s_saved_plane); - cvReleaseImage(&v_saved_plane); - - //Create cv_images - rgba = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 4); - rgb = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3); - grey = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - hsv = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3 ); - - h_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - planes[0] = h_plane; - planes[1] = s_plane; - cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); - h_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - saved_planes[0] = h_saved_plane; - saved_planes[1] = s_saved_plane; - - h_bins = (int)(comp_xsize/10); - s_bins = (int)(comp_ysize/10); - { - int hist_size[] = { h_bins, s_bins }; - float h_ranges[] = { 0, 180 }; // hue is [0,180] - float s_ranges[] = { 0, 255 }; - float* ranges[] = { h_ranges, s_ranges }; - hist = cvCreateHist( - 2, - hist_size, - CV_HIST_ARRAY, - ranges, - 1 - ); - int n; - for (n=0; nimageData, image.data, image.xsize*image.ysize*4 ); - - // Convert to hsv - cvCvtColor( rgba, rgb, CV_BGRA2BGR ); - cvCvtColor( rgb, hsv, CV_BGR2HSV ); - cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); - - // Build the histogram and compute its contents. - if (save_now>=0) { - post("saving histogram %d\n",save_now); - cvCvtPixToPlane( hsv, h_saved_plane, s_saved_plane, v_saved_plane, 0 ); - cvCalcHist( saved_planes, saved_hist[save_now], 0, 0 ); //Compute histogram - cvNormalizeHist( saved_hist[save_now], 1.0 ); //Normalize it - save_now=-1; - nbsaved++; - } - cvCalcHist( planes, hist, 0, 0 ); //Compute histogram - cvNormalizeHist( hist, 1.0 ); //Normalize it - - double tato[nbsaved]; - t_atom datalist[nbsaved]; - int nearest = -1; - double max = 0; - - int n; - if ( nbsaved > 0 ) - for (n=0; nmax) { - max = tato[n]; - nearest = n; - } - } - - if ( nbsaved > 0 ) { - outlet_float(m_dataout, (float)nearest); - outlet_list( m_measureout, 0, nbsaved , datalist ); - } else - outlet_float(m_dataout, -1.0); - - // Create an image to use to visualize our histogram. - int scale = 10; - // populate our visualization with little gray squares. - float max_value = 0; - cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 ); - - int h = 0; - int s = 0; - - for( h = 0; h < h_bins; h++ ) { - for( s = 0; s < s_bins; s++ ) { - float bin_val = cvQueryHistValue_2D( hist, h, s ); - int intensity = cvRound( bin_val * 255 / max_value ); - cvRectangle( - rgba, - cvPoint( h*scale, s*scale ), - cvPoint( (h+1)*scale - 1, (s+1)*scale - 1), - CV_RGB(intensity,intensity,intensity), CV_FILLED, 8 , 0 ); - } - } - - memcpy( image.data, rgba->imageData, image.xsize*image.ysize*4 ); - -} - -void pix_opencv_hist_compare :: processRGBImage(imageStruct &image) -{ - int i; - int h_bins = (int)(comp_xsize/10), s_bins = (int)(comp_ysize/10); - - if ((this->comp_xsize!=image.xsize)&&(this->comp_ysize!=image.ysize)) { - - this->comp_xsize=image.xsize; - this->comp_ysize=image.ysize; - - //Destroy cv_images to clean memory - cvReleaseImage(&rgba); - cvReleaseImage(&rgb); - cvReleaseImage(&grey); - cvReleaseImage(&h_plane); - cvReleaseImage(&s_plane); - cvReleaseImage(&v_plane); - cvReleaseImage(&h_saved_plane); - cvReleaseImage(&s_saved_plane); - cvReleaseImage(&v_saved_plane); - - //Create cv_images - rgba = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 4); - rgb = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3); - grey = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - hsv = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3 ); - - h_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - planes[0] = h_plane; - planes[1] = s_plane; - cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); - h_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - saved_planes[0] = h_saved_plane; - saved_planes[1] = s_saved_plane; - - h_bins = (int)(comp_xsize/10); - s_bins = (int)(comp_ysize/10); - { - int hist_size[] = { h_bins, s_bins }; - float h_ranges[] = { 0, 180 }; // hue is [0,180] - float s_ranges[] = { 0, 255 }; - float* ranges[] = { h_ranges, s_ranges }; - hist = cvCreateHist( - 2, - hist_size, - CV_HIST_ARRAY, - ranges, - 1 - ); - int n; - for (n=0; nimageData, image.data, image.xsize*image.ysize*3 ); - - // Convert to hsv - cvCvtColor( rgb, hsv, CV_BGR2HSV ); - cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); - - // Build the histogram and compute its contents. - if (save_now>=0) { - post("saving histogram %d\n",save_now); - cvCvtPixToPlane( hsv, h_saved_plane, s_saved_plane, v_saved_plane, 0 ); - cvCalcHist( saved_planes, saved_hist[save_now], 0, 0 ); //Compute histogram - cvNormalizeHist( saved_hist[save_now], 1.0 ); //Normalize it - save_now=-1; - nbsaved++; - } - cvCalcHist( planes, hist, 0, 0 ); //Compute histogram - cvNormalizeHist( hist, 1.0 ); //Normalize it - - double tato[nbsaved]; - t_atom datalist[nbsaved]; - int nearest = -1; - double max = 0; - - int n; - if ( nbsaved > 0 ) - for (n=0; nmax) { - max = tato[n]; - nearest = n; - } - } - - if ( nbsaved > 0 ) { - outlet_float(m_dataout, (float)nearest); - outlet_list( m_measureout, 0, nbsaved , datalist ); - } else - outlet_float(m_dataout, -1.0); - - // Create an image to use to visualize our histogram. - int scale = 10; - // populate our visualization with little gray squares. - float max_value = 0; - cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 ); - - int h = 0; - int s = 0; - - for( h = 0; h < h_bins; h++ ) { - for( s = 0; s < s_bins; s++ ) { - float bin_val = cvQueryHistValue_2D( hist, h, s ); - int intensity = cvRound( bin_val * 255 / max_value ); - cvRectangle( - rgb, - cvPoint( h*scale, s*scale ), - cvPoint( (h+1)*scale - 1, (s+1)*scale - 1), - CV_RGB(intensity,intensity,intensity), CV_FILLED, 8 , 0 ); - } - } - - memcpy( image.data, rgb->imageData, image.xsize*image.ysize*3 ); - -} - -void pix_opencv_hist_compare :: processYUVImage(imageStruct &image) -{ - post( "pix_opencv_hist_compare : yuv format not supported" ); -} - -void pix_opencv_hist_compare :: processGrayImage(imageStruct &image) -{ - int i; - int h_bins = (int)(comp_xsize/10), s_bins = (int)(comp_ysize/10); - - if ((this->comp_xsize!=image.xsize)&&(this->comp_ysize!=image.ysize)) { - - this->comp_xsize=image.xsize; - this->comp_ysize=image.ysize; - - //Destroy cv_images to clean memory - cvReleaseImage(&rgba); - cvReleaseImage(&rgb); - cvReleaseImage(&grey); - cvReleaseImage(&h_plane); - cvReleaseImage(&s_plane); - cvReleaseImage(&v_plane); - cvReleaseImage(&h_saved_plane); - cvReleaseImage(&s_saved_plane); - cvReleaseImage(&v_saved_plane); - - //Create cv_images - rgba = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 4); - rgb = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3); - grey = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - hsv = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3 ); - - h_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - planes[0] = h_plane; - planes[1] = s_plane; - cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); - h_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - s_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - v_saved_plane = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 1); - saved_planes[0] = h_saved_plane; - saved_planes[1] = s_saved_plane; - - h_bins = (int)(comp_xsize/10); - s_bins = (int)(comp_ysize/10); - { - int hist_size[] = { h_bins, s_bins }; - float h_ranges[] = { 0, 180 }; // hue is [0,180] - float s_ranges[] = { 0, 255 }; - float* ranges[] = { h_ranges, s_ranges }; - hist = cvCreateHist( - 2, - hist_size, - CV_HIST_ARRAY, - ranges, - 1 - ); - int n; - for (n=0; nimageData, image.data, image.xsize*image.ysize ); - - // Convert to hsv - cvCvtColor( grey, rgb, CV_GRAY2BGR ); - cvCvtColor( rgb, hsv, CV_BGR2HSV ); - cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); - - // Build the histogram and compute its contents. - if (save_now>=0) { - post("saving histogram %d\n",save_now); - cvCvtPixToPlane( hsv, h_saved_plane, s_saved_plane, v_saved_plane, 0 ); - cvCalcHist( saved_planes, saved_hist[save_now], 0, 0 ); //Compute histogram - cvNormalizeHist( saved_hist[save_now], 1.0 ); //Normalize it - save_now=-1; - nbsaved++; - } - cvCalcHist( planes, hist, 0, 0 ); //Compute histogram - cvNormalizeHist( hist, 1.0 ); //Normalize it - - double tato[nbsaved]; - t_atom datalist[nbsaved]; - int nearest = -1; - double max = 0; - - int n; - if ( nbsaved > 0 ) - for (n=0; nmax) { - max = tato[n]; - nearest = n; - } - } - - if ( nbsaved > 0 ) { - outlet_float(m_dataout, (float)nearest); - outlet_list( m_measureout, 0, nbsaved , datalist ); - } else - outlet_float(m_dataout, -1.0); - - // Create an image to use to visualize our histogram. - int scale = 10; - // populate our visualization with little gray squares. - float max_value = 0; - cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 ); - - int h = 0; - int s = 0; - - for( h = 0; h < h_bins; h++ ) { - for( s = 0; s < s_bins; s++ ) { - float bin_val = cvQueryHistValue_2D( hist, h, s ); - int intensity = cvRound( bin_val * 255 / max_value ); - cvRectangle( - grey, - cvPoint( h*scale, s*scale ), - cvPoint( (h+1)*scale - 1, (s+1)*scale - 1), - CV_RGB(intensity,intensity,intensity), CV_FILLED, 8 , 0 ); - } - } - - memcpy( image.data, grey->imageData, image.xsize*image.ysize ); - -} - -///////////////////////////////////////////////////////// -// static member function -// -///////////////////////////////////////////////////////// - -void pix_opencv_hist_compare :: obj_setupCallback(t_class *classPtr) -{ - class_addmethod(classPtr, (t_method)&pix_opencv_hist_compare::saveMessCallback, - gensym("save"), A_FLOAT, A_NULL); -} - -void pix_opencv_hist_compare :: saveMess(float index) -{ - if (((int)index>=0)&&((int)indexsaveMess(index); -} -- cgit v1.2.1