转: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];

转载于:https://www.cnblogs.com/zkliuym/archive/2010/05/08/1730788.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值