基于OpenCV的人脸识别设计方案
然后利用start()函数开启QTimer 定时器,每隔一段时间发送信号调用自定义的槽函数,该槽函数用cvGrab()从视频流中抓取一帧图像放入缓存,再利用CvRetrieve()从内部缓存中将帧图像读出用于接下来的处理与显示。在qt 中显示之前,需将IplImage* source 转换为QPixmap 类型。
uchar *qImageBuffer = NULL;
/*根据图像大小分配缓冲区*/
qImageBuffer = (uchar*) malloc(source-》width *
source->height * 4 * sizeof(uchar));
/*将缓冲区指针拷贝到存取Qimage 的指针中*/
uchar *QImagePtr = qImageBuffer;
/* 获取源图像内存指针*/Const uchar*
iplImagePtr=reinterpret_cast/uchar*》>(source->imageDat
a);
/*通过循环将源图像数据拷贝入缓冲区内*/
for (int y = 0; y source->height; ++y){
for (int x = 0; x source->width; ++x){
QImagePtr[0] = iplImagePtr[0];
QImagePtr[1] = iplImagePtr[1];
QImagePtr[2] = iplImagePtr[2];
QImagePtr[3] = 0;
QImagePtr += 4;
iplImagePtr += 3; }
iplImagePtr+=source->widthStep–3*source->width; }
/*将Qimage 转换为Qpixmap*/QPixmap local =
QPixmap::fromImage(QImage(qImageBuffer,source-》wi
dth,source-》height, QImage::Format_RGB32));
/*释放缓冲区*/
free(qImageBuffer);
最后利用QLabel 的setPixmap()函数进行显示。
c++相关文章:c++教程
cvt相关文章:cvt原理
全息投影相关文章:全息投影原理
评论