海阔天空

海阔凭鱼跃 天高任鸟飞

 

转:OpenCV中IplImage图像格式与 BYTE图像数据的转换

OpenCV中IplImage图像格式与 BYTE图像数据的转换

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_#ff0000, 3, 8, 0 );
}

检测得到的图像再通过以下方式转换回BYTE* pImg

for (i=0;i<320*240*3;i++)
     pImg[i] = (frame->imageDataOrigin)[i];

posted on 2010-05-08 22:53  liuym  阅读(3676)  评论(0编辑  收藏  举报

导航