首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与imread相比,QImage to cv::Mat转换奇怪的行为

与imread相比,QImage to cv::Mat转换奇怪的行为
EN

Stack Overflow用户
提问于 2016-11-25 20:47:17
回答 2查看 207关注 0票数 0

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

代码语言:javascript
复制
QImage im;
im.save ("tmp.bmp");
cv::Mat rImage;
rImage = cv::imread ("tmp.bmp", CV_LOAD_IMAGE_GRAYSCALE);

function findContours工作正常。这些技术之间的区别是什么?我可以用什么方法来归档这些方法之间相同的结果?

EN

回答 2

Stack Overflow用户

发布于 2016-11-27 02:35:08

你的代码很适合我。

代码语言:javascript
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2016-12-01 04:51:21

所有人!

如上所述,我按照here的描述使用了QImage到cv::Mat的转换。我的源代码是这样的:

代码语言:javascript
复制
QImage srcIm (argv[1]);
QImage img2 = srcIm.convertToFormat(QImage::Format_ARGB32);
Mat src_gray = QImageToCvMat (img2);
cvtColor (src_gray, src_gray1, CV_RGB2GRAY);

Mat bwimg = src_gray1.clone();// > 127;
vector<vector<Point> > contours;

findContours( bwimg, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE );    

一切正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40805441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档