From 05b77eed721931281759bf222e319b05d81458c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?llu=C3=ADs=20g=C3=B3mez=20i=20bigord=C3=A0?= Date: Thu, 24 Sep 2009 22:08:54 +0000 Subject: 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 --- Makefile | 2 ++ pix_opencv_colorfilt.cc | 38 ++++++++++++++++++++++++++++++++------ pix_opencv_contours_convexhull.cc | 10 ++++++++++ 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 3f89146..c0ee4bb 100644 --- a/Makefile +++ b/Makefile @@ -13,12 +13,14 @@ CPPFLAGS = -fPIC -DPD -O2 -funroll-loops -fomit-frame-pointer -ffast-math \ UNAME := $(shell uname -s) ifeq ($(UNAME),Linux) + CPPFLAGS += -DLINUX INCLUDES += `pkg-config --cflags opencv` LDFLAGS = -export_dynamic -shared LIBS = `pkg-config --libs opencv` EXTENSION = pd_linux endif ifeq ($(UNAME),Darwin) + CPPFLAGS += -DDARWIN INCLUDES += -I/System/Library/Frameworks/OpenCV.framework/Headers/ LDFLAGS = -bundle -undefined dynamic_lookup LIBS = -lm -framework OpenCV 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; pyheight; py++ ) { for( px=0; pxwidth; 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 ); diff --git a/pix_opencv_contours_convexhull.cc b/pix_opencv_contours_convexhull.cc index ebd60a3..ae70e20 100644 --- a/pix_opencv_contours_convexhull.cc +++ b/pix_opencv_contours_convexhull.cc @@ -182,14 +182,24 @@ void pix_opencv_contours_convexhull :: processRGBAImage(imageStruct &image) // Draw convex hull for current contour. for(i=0; i