gpt4 book ai didi

c++ - opencv Qt 如何有效地创建彩色图像并将其传递给 QImage?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:34 26 4
gpt4 key购买 nike

这个问题在 how to convert an opencv cv::Mat to qimage 得到了部分回答。

我使用 Qt 5.5,opencv 2.4,mac yosemite 10.10.5。

我正在寻找一种使用 QImage 显示彩色图像的有效方法,其颜色信息来自 3 个不同的 cv::Mat 对象,这些对象包含彩色图像的 3 个 RGB channel 。对于我自己的“教育”,我需要了解最初如何使用分离的 channel 工作。我不清楚从这 3 个独立的 channel 中获得 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 library 的对象其中包含图像数据。 redPgreenPblueP,顾名思义,是指向红、绿、蓝 channel 的指针,这段代码假设(正确我,如果我错了)像素值的 cv::Mat 地址在内存中是连续的。

从这里开始,我应该如何高效color图像的缓冲区传递给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。

关于c++ - opencv Qt 如何有效地创建彩色图像并将其传递给 QImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33539717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com