gpt4 book ai didi

c++ - 与 imread 相比,QImage 到 cv::Mat 转换奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:49 24 4
gpt4 key购买 nike

如果我使用 similar topics 中描述的技术,我必须将 QImage 转换为 cv::Mat ,我收到不同数量的轮廓 (7--8) 和奇怪的结果矩阵,但如果我这样做了

QImage im;
im.save ("tmp.bmp");
cv::Mat rImage;
rImage = cv::imread ("tmp.bmp", CV_LOAD_IMAGE_GRAYSCALE);

函数 findContours 工作正常。这些技术之间有什么区别,我可以通过哪种方式在这些方法之间获得相同的结果?

最佳答案

您的代码对我有用。

int main(int argc, char *argv[]){
QImage img(QString("lena.bmp"));
QImage img2 = img.convertToFormat(QImage::Format_RGB32);
cv::Mat imageMat = qimage_to_cvmat_copy(img2, CV_8UC4);
cv::namedWindow("lena");
cv::imshow("lena", imageMat);
cv::waitKey(0);
}
cv::Mat qimage_to_cvmat_copy(const QImage &img, int format)
{
uchar* b = const_cast<uchar*> (img.bits ());
int c = img.bytesPerLine();
return cv::Mat(img.height(), img.width(), format, b, c).clone();
}

如果您的 QImage 格式是 Format_RGB32,请确保您的 Mat 格式是 CV_8UC4。您不必执行 cvtColor 或 mixChannels。

关于c++ - 与 imread 相比,QImage 到 cv::Mat 转换奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805441/

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