为了避免在不同计算机上图片文件的路径不同,Qt 引入了资源文件的概念,但是 OpenCV 读取图片时,不能识别资源文件路径。
在代码中这样写,会发现读取的图像为空。
cv::Mat im = cv::imread(":/img/a.jpg");
cout << im.empty();
为了解决这个问题,可以单独写个 loadFromQrc 函数,先读到buffer 中,再进行转换。
cv::Mat loadFromQrc(QString qrc, int flag = cv::IMREAD_COLOR)
{
QFile file(qrc);
cv::Mat m;
if(file.open(QIODevice::ReadOnly)) {
qint64 sz = file.size();
std::vector<uchar> buf(sz);
file.read((char*)buf.data(), sz);
m = cv::imdecode(buf, flag);
}
return m;
}
使用方法为:
cv::Mat logo = loadFromQrc(":/img/a.jpg");