簡體   English   中英

opencv Qt如何有效地創建彩色圖像並將其傳遞給QImage?

[英]opencv Qt how to efficiently create and pass color image to QImage?

這個問題在如何將opencv cv :: Mat轉換為qimage時得到部分回答。

我使用Qt 5.5和opencv 2.4,mac優勝美地10.10.5。

我正在尋找一種使用QImage顯示彩色圖像的有效方法,該圖像的顏色信息來自3個不同的cv :: Mat對象,其中包含彩色圖像的3個RGB通道。 對於我自己的“教育”,我需要了解如何在分離的渠道下進行工作。 對我來說還不清楚,從這三個分離的通道中最終獲得QImage的最有效方法是什么。

cv :: Mat對象的聲明和分配如下:

imRed = new Mat(Size(naxis1, naxis2), CV_64F);
imGreen = new Mat(Size(naxis1, naxis2), CV_64F);
imBlue = new Mat(Size(naxis1, naxis2), CV_64F);


double* redP = imRed->ptr<double>(0);
double* greenP = imGreen->ptr<double>(0);
double* blueP = imBlue->ptr<double>(0);

for (long i = 0; i < nPixels; i++)
{

    redP[i] = (double) rawProcess.imgdata.image[i][0];;
    greenP[i] = (double) rawProcess.imgdata.image[i][1];
    blueP[i] = (double) rawProcess.imgdata.image[i][2];

}

其中rawProcess是來自Libraw庫的對象,其中包含圖像數據。 redPredPgreenPblueP是指向紅色,綠色和藍色通道的指針,並且此代碼假定(如果我錯了,請糾正我)像素值的cv::Mat地址是連續的記憶。

從這里開始,如何有效地彩色圖像的緩沖區傳遞給QImage,即,最小化中間副本,循環等...(如果需要,我的系統可以使用openMP,我有4個線程可用)?

謝謝

下面的代碼正在工作。

從上面的代碼開始(使用naxis1和naxis2表示圖像的寬度和高度):

imRed = new Mat(Size(naxis1, naxis2), CV_64F);
imGreen = new Mat(Size(naxis1, naxis2), CV_64F);
imBlue = new Mat(Size(naxis1, naxis2), CV_64F);


double* redP = imRed->ptr<double>(0);
double* greenP = imGreen->ptr<double>(0);
double* blueP = imBlue->ptr<double>(0);

for (long i = 0; i < nPixels; i++)
{

    redP[i] = (double) rawProcess.imgdata.image[i][0];;
    greenP[i] = (double) rawProcess.imgdata.image[i][1];
    blueP[i] = (double) rawProcess.imgdata.image[i][2];

}

我加:

std::vector<cv::Mat> matVector;
matVector.push_back(imRed);
matVector.push_back(imGreen);
matVector.push_back(imBlue);

cv::Mat colorMat32;
cv::merge(matVector, colorMat32);

cv::Mat colorMat888

double alpha = (double) (255 / 65535);
double beta = 0.0;

colorMat32.convertTo(colorMat888, CV_8UC3, alpha, beta);

newPaintImage = new QImage(colorMat888.data, naxis1, naxis2, QImage::Format_RGB888);

謝謝@Micka。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM