最近做的項目需要在QImage和IplImage之間進行轉換,由於用傳統的方法很耗時,所以想到用共享內存:
pFrame = cvQueryFrame(pCapture);
if (pFrame)
{
this->resize(pFrame->width,pFrame->height);
}
pQImg = QImage(pFrame->width, pFrame->height, QImage::Format_RGB888);//QImage圖像指針
pShareFrame = cvCreateImageHeader(cvSize(pFrame->width,pFrame->height), 8, 3);//IplImage圖像指針,在這裏只是定義了一個該結構的頭
pShareFrame->imageData = (char*)pQImg.bits();//該語句實現了內存共享,也就是讓QImage和IplImage指向同一塊數據內存區,當pShareFrame的數據發生變化的時候,也就代表pQImg也會發生相應的變化,因爲他們指向的是同一塊內存區域
cvCopy(pFrame,pShareFrame);
cvCvtColor(pShareFrame, pShareFrame, CV_BGR2RGB);
gazeAvi.convertFromImage(pQImg);
cvReleaseImageHeader(&pShareFrame);
需要注意的是,QT中的的圖片是RGB格式,而OpenCV攝像頭獲得圖片是BGR格式,所有需要把IplImage