Specifications
User Defined Functions
13-9
13
Example 13-2 Pixel Values Processing by User Defined Function
static void __STDCALL rgb2gray( IplImage* srcImage,
void* srcPixel, IplImage* dstImage, void* dstPixel )
{
uchar* src = (uchar*)srcPixel;
uchar* dst = (uchar*)dstPixel;
if( 1 != dstImage->nChannels ) {
IPL_ERROR( IPL_BadNumChannels, "rgb2gray",
"Output image must be one-channel image");
return;
}
dst[0] = (uchar)( 0.212671 * src[0] +
0.71516 * src[1] + 0.072169 * src[2] + 0.5 );
}
void exmRgb2Gray( void ) {
const int side = 5;
IplROI roi={1,0,0,side, side };
IplImage *jmg, *dst, *src = iplCreateImageHeader(
3, 0, IPL_DEPTH_8U, "RGBA", "BGRA",
IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_TL,
IPL_ALIGN_DWORD, side, side, &roi, NULL,
NULL, NULL);
iplAllocateImage( src, 0, 0 );
dst = iplCreateImageHeader(
1, 0, IPL_DEPTH_8U, "GRAY", "GRAY",
IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_TL,
IPL_ALIGN_DWORD, side, side, NULL, NULL,
NULL, NULL);
iplAllocateImage( dst, 1, 0 );
jmg = iplCreateImageJaehne( IPL_DEPTH_8U, side, side );
iplCopy( jmg, src );
src->roi = 0;
iplUserProcessPixel( src, dst, rgb2gray );
iplDeallocate( jmg, IPL_IMAGE_ALL );
iplDeallocate( dst, IPL_IMAGE_ALL );
iplDeallocate( src, IPL_IMAGE_ALL );
}