//对不起我的英语不好。 请告诉我,我做错了什么? 我读了很多关于这个。 并写一些代码,但我有一个可怕的结果。 据我所知在Opencv CV_8UC3是相同的QImage :: Format_RGB888 ,除了BRG和RGB相应。 以这种格式读取cv :: Mat我可以这样做: cv::Mat mat1 = cv::imread("bugero.jpg",3); 所以,要将cv :: Mat转换为QImage,我可以这样做: QImage Mat2QImage(cv::Mat const& src) { cv::Mat temp(src.cols,src.rows,src.type()); cvtColor(src, temp,CV_BGR2RGB); QImage dest= QImage((uchar*) temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888); return dest; } 我做了temp mat,因为我想在QImage中有数据副本。 然后。 将其转换回来我必须这样做: cv::Mat QImage2Mat(QImage const& src) { QImage temp = src.copy(); cv::Mat res(temp.height(),temp.width(),CV_8UC3,(uchar*)temp.bits(),temp.bytesPerLine()); cvtColor(res, […]
有没有比OpenCV中的FileStorage方法更有效的方法来加载一个大型的Mat对象? 我有一个大的垫子,192列,100万行,我想本地存储在一个文件,并加载到内存然后我的应用程序启动。 使用FileStorage没有问题,但我想知道是否存在一个更有效的方法来做到这一点。 目前,使用Visual Studio中的debugging模式将Mat放入内存大约需要5分钟,在Release模式下大约需要3分钟,数据文件大小约为1.2GB。 FileStorage方法是唯一可用于执行此任务的方法吗?