2012-11-07 104 views
0

我想将cv :: mat的缓冲区指向QImage的缓冲区,但不要将QImage的数据复制到cv :: mat中。使cv mat的缓冲区指向QImage的缓冲区

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

回答

0

cv::Mat对象只是针对图像数据的报头,这样你就可以在你的对象构造做到这一点:

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

其中type取决于你的数据,CV_8UC1单通道,CV_8UC3为RGB等

+0

注意opencv内部预计数据为BGR –

+0

谢谢,这个解决方案很容易和清洁 – StereoMatching

+0

cv :: Mat会删除它指向的缓冲区吗? – StereoMatching