繁体   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