如何查找opencv中cvCreateImage的函数源码,我在opencv的src等文件夹下都没有找到

2025-12-18 01:36:29
推荐回答(2个)
回答1:

CV_IMPL IplImage*
cvInitImageHeader( IplImage * image, CvSize size, int depth,
int channels, int origin, int align )
{
const char *colorModel, *channelSeq;

if( !image )
CV_Error( CV_HeaderIsNull, "null pointer to header" );

memset( image, 0, sizeof( *image ));
image->nSize = sizeof( *image );

icvGetColorModel( channels, &colorModel, &channelSeq );
strncpy( image->colorModel, colorModel, 4 );
strncpy( image->channelSeq, channelSeq, 4 );

if( size.width < 0 || size.height < 0 )
CV_Error( CV_BadROISize, "Bad input roi" );

if( (depth != (int)IPL_DEPTH_1U && depth != (int)IPL_DEPTH_8U &&
depth != (int)IPL_DEPTH_8S && depth != (int)IPL_DEPTH_16U &&
depth != (int)IPL_DEPTH_16S && depth != (int)IPL_DEPTH_32S &&
depth != (int)IPL_DEPTH_32F && depth != (int)IPL_DEPTH_64F) ||
channels < 0 )
CV_Error( CV_BadDepth, "Unsupported format" );
if( origin != CV_ORIGIN_BL && origin != CV_ORIGIN_TL )
CV_Error( CV_BadOrigin, "Bad input origin" );

if( align != 4 && align != 8 )
CV_Error( CV_BadAlign, "Bad input align" );

image->width = size.width;
image->height = size.height;

if( image->roi )
{
image->roi->coi = 0;
image->roi->xOffset = image->roi->yOffset = 0;
image->roi->width = size.width;
image->roi->height = size.height;
}

image->nChannels = MAX( channels, 1 );
image->depth = depth;
image->align = align;
image->widthStep = (((image->width * image->nChannels *
(image->depth & ~IPL_DEPTH_SIGN) + 7)/8)+ align - 1) & (~(align - 1));
image->origin = origin;
image->imageSize = image->widthStep * image->height;

return image;
}

CV_IMPL IplImage *
cvCreateImageHeader( CvSize size, int depth, int channels )
{
IplImage *img = 0;

if( !CvIPL.createHeader )
{
img = (IplImage *)cvAlloc( sizeof( *img ));
cvInitImageHeader( img, size, depth, channels, IPL_ORIGIN_TL,
CV_DEFAULT_IMAGE_ROW_ALIGN );
}
else
{
const char *colorModel, *channelSeq;

icvGetColorModel( channels, &colorModel, &channelSeq );

img = CvIPL.createHeader( channels, 0, depth, (char*)colorModel, (char*)channelSeq,
IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_TL,
CV_DEFAULT_IMAGE_ROW_ALIGN,
size.width, size.height, 0, 0, 0, 0 );
}

return img;
}

// create IplImage header and allocate underlying data
CV_IMPL IplImage *
cvCreateImage( CvSize size, int depth, int channels )
{
IplImage *img = cvCreateImageHeader( size, depth, channels );
assert( img );
cvCreateData( img );

return img;
}

回答2:

前面设断点,
然后单步进入函数,可以跑进去
这个函数有什么好看的
无非就是分配内存空间,iplimage 结构赋值什么的