【问题标题】:Make buffer of cv mat Point to the buffer of QImage使 cv mat 的缓冲区指向 QImage 的缓冲区
【发布时间】:2012-11-08 01:56:24
【问题描述】:

我想让 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

【问题讨论】:

    标签: qt opencv


    【解决方案1】:

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

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

    type 取决于您的数据,CV_8UC1 用于单通道,CV_8UC3 用于 RGB,等等。

    【讨论】:

    • 注意opencv内部期望数据为BGR
    • 谢谢,这个解决方案既简单又干净
    • 我做了一些测试,看起来它不会删除 buffer.char *raw = new char[100]; *原始='a'; { cv::Mat mat(10, 10, CV_8U, raw); } qDebug()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多