使cv mat的缓冲区指向QImage的缓冲区

时间:2012-11-07 16:38:18

标签: qt opencv

我想让cv :: mat的缓冲区指向QImage的缓冲区而不是复制 将QImage的数据导入cv :: mat。

cv::Mat const reference_qimage_to_mat(QImage const &img, int format)
{
    cv::Mat mat(img.height(), img.width(), format);

    for(int i = 0; i != mat.rows; ++i)
    {
        //pseudo code, wouldn't work
        //mat.ptr(i) = img.scanLine(i);
    }

    return mat;
}

我尝试通过谷歌搜索答案,但我只能找到如何复制 将QImage的数据转换为cv :: mat.Thanks

1 个答案:

答案 0 :(得分:0)

cv::Mat对象只是图像数据的标题,因此您可以在对象构造上执行此操作:

cv::Mat mat(img.height(), img.width(), type, img.bits());

其中type取决于您的数据,CV_8UC1取决于单个频道,CV_8UC3取决于RGB等等。