QImage和IplImage共享內存

最近做的項目需要在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章