aboutsummaryrefslogtreecommitdiff
path: root/pix_opencv_colorfilt.cc
diff options
context:
space:
mode:
authorlluís gómez i bigordà <lluisbigorda@users.sourceforge.net>2009-09-24 22:08:54 +0000
committerlluís gómez i bigordà <lluisbigorda@users.sourceforge.net>2009-09-24 22:08:54 +0000
commit05b77eed721931281759bf222e319b05d81458c9 (patch)
tree59cdd6800060871317b88f4d2df3258e8e862e9e /pix_opencv_colorfilt.cc
parentf3117bf10c367592e30a7b5559e30d7b75b494f3 (diff)
The colorspace in Gem-MACOSX is GRAB instead of RGBA in Linux
so added -DDARWIN -DLINUX definitions in the Makefile and custom code for each system on pix_opencv_contours_convexhull and pix_opencv_colorfilt svn path=/trunk/externals/pix_opencv/; revision=12446
Diffstat (limited to 'pix_opencv_colorfilt.cc')
-rw-r--r--pix_opencv_colorfilt.cc38
1 files changed, 32 insertions, 6 deletions
diff --git a/pix_opencv_colorfilt.cc b/pix_opencv_colorfilt.cc
index 483f0b1..7e038b8 100644
--- a/pix_opencv_colorfilt.cc
+++ b/pix_opencv_colorfilt.cc
@@ -55,7 +55,11 @@ pix_opencv_colorfilt :: pix_opencv_colorfilt()
rgba = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 4);
rgb = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3);
+#ifdef DARWIN
+ brgb = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 4);
+#else
brgb = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3);
+#endif
}
/////////////////////////////////////////////////////////
@@ -111,27 +115,39 @@ void pix_opencv_colorfilt :: processRGBAImage(imageStruct &image)
//create the orig image with new size
rgba = cvCreateImage(cvSize(image.xsize,image.ysize), IPL_DEPTH_8U, 4);
rgb = cvCreateImage(cvSize(image.xsize,image.ysize), IPL_DEPTH_8U, 3);
+#ifdef DARWIN
+ brgb = cvCreateImage(cvSize(image.xsize,image.ysize), IPL_DEPTH_8U, 4);
+#else
brgb = cvCreateImage(cvSize(image.xsize,image.ysize), IPL_DEPTH_8U, 3);
+#endif
}
memcpy( rgba->imageData, image.data, image.xsize*image.ysize*4 );
- cvCvtColor(rgba, brgb, CV_BGRA2BGR);
+ cvCopy(rgba, brgb);
for( py=0; py<rgba->height; py++ ) {
for( px=0; px<rgba->width; px++ ) {
- b = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4];
+#ifdef DARWIN
+ g = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4];
+ r = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4+1];
+ b = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4+3];
+#else
+ r = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4];
g = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4+1];
- r = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4+2];
+ b = ((uchar*)(rgba->imageData + rgba->widthStep*(int)py))[(int)px*4+2];
+#endif
diff = 0;
diff = abs(r-x_colorR );
diff += abs(g-x_colorG );
diff += abs(b-x_colorB );
+ diff = diff/3;
if ( diff > x_tolerance )
{
(rgba->imageData + rgba->widthStep*(int)py)[(int)px*4] = 0x0;
(rgba->imageData + rgba->widthStep*(int)py)[(int)px*4+1] = 0x0;
(rgba->imageData + rgba->widthStep*(int)py)[(int)px*4+2] = 0x0;
+ (rgba->imageData + rgba->widthStep*(int)py)[(int)px*4+3] = 0x0;
}
}
}
@@ -162,7 +178,11 @@ void pix_opencv_colorfilt :: processRGBImage(imageStruct &image)
//create the orig image with new size
rgba = cvCreateImage(cvSize(image.xsize,image.ysize), IPL_DEPTH_8U, 4);
rgb = cvCreateImage(cvSize(image.xsize,image.ysize), IPL_DEPTH_8U, 3);
+#ifdef DARWIN
+ brgb = cvCreateImage(cvSize(rgb->width,rgb->height), IPL_DEPTH_8U, 4);
+#else
brgb = cvCreateImage(cvSize(rgb->width,rgb->height), IPL_DEPTH_8U, 3);
+#endif
}
memcpy( rgb->imageData, image.data, image.xsize*image.ysize*3 );
@@ -229,10 +249,16 @@ void pix_opencv_colorfilt :: pickMess (float xcur, float ycur)
if ( ( xcur >= 0. ) && ( xcur <= comp_xsize )
&& ( ycur > 0. ) && ( ycur < comp_ysize ) )
{
- x_colorB = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*3];
+#ifdef DARWIN
+ x_colorR = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*4+1];
+ x_colorG = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*4+2];
+ x_colorB = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*4+3];
+#else
+ ycur = brgb->height - ycur;
+ x_colorR = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*3];
x_colorG = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*3+1];
- x_colorR = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*3+2];
-
+ x_colorB = ((uchar*)(brgb->imageData + brgb->widthStep*(int)ycur))[(int)xcur*3+2];
+#endif
outlet_float( x_R, x_colorR );
outlet_float( x_G, x_colorG );
outlet_float( x_B, x_colorB );