IplImage* iplImage;
BYTE* data.
1. 由IplImage*得到BYTE*图像数据:
data = iplImage->imageDataOrigin; //未对齐的原始图像数据
或者
data = iplImage->imageData; //已对齐的图像数据
2. 由BYTE*得到IplImage*图像数据
iplImage = cvCreateImageHeader(cvSize(width,height),depth,channels);
cvSetData(iplImage,data,step);
首先由cvCreateImageHeader()创建IplImage图像头,制定图像的尺寸,深度和通道数;然后由cvSetData()根据 BYTE*图像数据指针设置IplImage图像头的数据数据,其中step指定该IplImage图像每行占的字节数,对于1通道的 IPL_DEPTH_8U图像,step可以等于width。
我从视频上获取一帧图像(320X240,RGB),存为BYTE* pImg。想用OpenCV 1.0检测人脸,通过以下方法转化为IplImage* frame :
frame = cvCreateImageHeader(cvSize(320,240),IPL_DEPTH_8U,3);
cvSetData(frame,pImg,320*3);
再通过网站示例进行检测
CvPoint pt1, pt2;
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(40, 40) );
for( int i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;
cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
}
检测得到的图像再通过以下方式转换回BYTE* pImg
for (i=0;i<320*240*3;i++)
pImg[i] = (frame->imageDataOrigin)[i];
OpenCV中IplImage图像格式与BYTE图像数据的转换
最新推荐文章于 2021-02-24 13:32:22 发布