基于OpenCV的人臉識(shí)別設(shè)計(jì)方案
然后利用start()函數(shù)開(kāi)啟QTimer 定時(shí)器,每隔一段時(shí)間發(fā)送信號(hào)調(diào)用自定義的槽函數(shù),該槽函數(shù)用cvGrab()從視頻流中抓取一幀圖像放入緩存,再利用CvRetrieve()從內(nèi)部緩存中將幀圖像讀出用于接下來(lái)的處理與顯示。在qt 中顯示之前,需將IplImage* source 轉(zhuǎn)換為QPixmap 類型。
uchar *qImageBuffer = NULL;
/*根據(jù)圖像大小分配緩沖區(qū)*/
qImageBuffer = (uchar*) malloc(source-》width *
source->height * 4 * sizeof(uchar));
/*將緩沖區(qū)指針拷貝到存取Qimage 的指針中*/
uchar *QImagePtr = qImageBuffer;
/* 獲取源圖像內(nèi)存指針*/Const uchar*
iplImagePtr=reinterpret_cast/uchar*》>(source->imageDat
a);
/*通過(guò)循環(huán)將源圖像數(shù)據(jù)拷貝入緩沖區(qū)內(nèi)*/
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 轉(zhuǎn)換為Qpixmap*/QPixmap local =
QPixmap::fromImage(QImage(qImageBuffer,source-》wi
dth,source-》height, QImage::Format_RGB32));
/*釋放緩沖區(qū)*/
free(qImageBuffer);
最后利用QLabel 的setPixmap()函數(shù)進(jìn)行顯示。
c++相關(guān)文章:c++教程
cvt相關(guān)文章:cvt原理
全息投影相關(guān)文章:全息投影原理
評(píng)論