aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pdp_opencv_histo.c74
1 files changed, 31 insertions, 43 deletions
diff --git a/pdp_opencv_histo.c b/pdp_opencv_histo.c
index 7a7e590..90d99e4 100644
--- a/pdp_opencv_histo.c
+++ b/pdp_opencv_histo.c
@@ -158,41 +158,31 @@ static void pdp_opencv_histo_process_rgb(t_pdp_opencv_histo *x)
cvCvtPixToPlane( x->hsv, x->h_saved_plane, x->s_saved_plane, x->v_saved_plane, 0 );
cvCalcHist( x->saved_planes, x->saved_hist[x->save_now], 0, 0 ); //Compute histogram
cvNormalizeHist( x->saved_hist[x->save_now], 1.0 ); //Normalize it
- x->nbsaved++;
x->save_now=-1;
- }
- cvCalcHist( x->planes, x->hist, 0, 0 ); //Compute histogram
- cvNormalizeHist( x->hist, 1.0 ); //Normalize it
-
- double tato[MAX_HISTOGRAMS_TO_COMPARE];
- int nearest = -1;
- double max = 0;
-
- int n;
- for (n=0; n<MAX_HISTOGRAMS_TO_COMPARE; n++) {
- tato[n] = cvCompareHist(x->hist, x->saved_hist[n], CV_COMP_INTERSECT);
- if (tato[n]>max) {
- max = tato[n];
- nearest = n;
- }
- }
+ x->nbsaved++;
+ }
+ cvCalcHist( x->planes, x->hist, 0, 0 ); //Compute histogram
+ cvNormalizeHist( x->hist, 1.0 ); //Normalize it
+
+ double tato[MAX_HISTOGRAMS_TO_COMPARE];
+ int nearest = -1;
+ double max = 0;
+
+ int n;
+ if ( x->nbsaved > 0 )
+ for (n=0; n<MAX_HISTOGRAMS_TO_COMPARE; n++) {
+ tato[n] = cvCompareHist(x->hist, x->saved_hist[n], CV_COMP_INTERSECT);
+ if (tato[n]>max) {
+ max = tato[n];
+ nearest = n;
+ }
+ }
- if ( x->nbsaved > 0 )
- outlet_float(x->x_outlet1, (float)nearest);
- else
- outlet_float(x->x_outlet1, -1.0);
+ outlet_float(x->x_outlet1, (float)nearest);
// Create an image to use to visualize our histogram.
int scale = 10;
- //IplImage* hist_img = cvCreateImage(
- // cvSize(x->x_width,x->x_height),
- // 8,
- // 3
- //);
- //cvZero( hist_img );
-
// populate our visualization with little gray squares.
-
float max_value = 0;
cvGetMinMaxHistValue( x->hist, 0, &max_value, 0, 0 );
@@ -200,19 +190,17 @@ static void pdp_opencv_histo_process_rgb(t_pdp_opencv_histo *x)
int s = 0;
for( h = 0; h < h_bins; h++ ) {
- for( s = 0; s < s_bins; s++ ) {
- float bin_val = cvQueryHistValue_2D( x->hist, h, s );
- int intensity = cvRound( bin_val * 255 / max_value );
- cvRectangle(
- x->src,
- cvPoint( h*scale, s*scale ),
- cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),
- CV_RGB(intensity,intensity,intensity), CV_FILLED, 8 , 0 );
- }
+ for( s = 0; s < s_bins; s++ ) {
+ float bin_val = cvQueryHistValue_2D( x->hist, h, s );
+ int intensity = cvRound( bin_val * 255 / max_value );
+ cvRectangle(
+ x->src,
+ cvPoint( h*scale, s*scale ),
+ cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),
+ CV_RGB(intensity,intensity,intensity), CV_FILLED, 8 , 0 );
+ }
}
- //memory copy again, now from x->cedge->imageData to the new data pdp packet
- //memcpy( newdata, hist_img, x->x_size*3 );
memcpy( newdata, x->src->imageData, x->x_size*3 );
return;
@@ -220,7 +208,7 @@ static void pdp_opencv_histo_process_rgb(t_pdp_opencv_histo *x)
static void pdp_opencv_histo_save(t_pdp_opencv_histo *x, t_floatarg f)
{
- if (((int)f>=0)&&((int)f<MAX_HISTOGRAMS_TO_COMPARE)) x->save_now = (int)f;
+ if (((int)f>=0)&&((int)f<MAX_HISTOGRAMS_TO_COMPARE)) x->save_now = (int)f;
}
static void pdp_opencv_histo_sendpacket(t_pdp_opencv_histo *x)
@@ -286,7 +274,6 @@ static void pdp_opencv_histo_free(t_pdp_opencv_histo *x)
pdp_queue_finish(x->x_queue_id);
pdp_packet_mark_unused(x->x_packet0);
- //cv_freeplugins(x);
//Destroy cv_images
cvReleaseImage(&x->src);
@@ -323,7 +310,7 @@ void *pdp_opencv_histo_new(t_floatarg f)
x->x_infosok = 0;
x->save_now = 0;
x->nbsaved = 0;
-
+
x->src = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3);
x->hsv = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3 );
@@ -387,6 +374,7 @@ void pdp_opencv_histo_setup(void)
class_addmethod(pdp_opencv_histo_class, (t_method)pdp_opencv_histo_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL);
class_addmethod(pdp_opencv_histo_class, (t_method)pdp_opencv_histo_save, gensym("save"), A_FLOAT, A_NULL );
+
}
#ifdef __cplusplus