【问题标题】:Access multiple channels in OpenCV Mat在 OpenCV Mat 中访问多个通道
【发布时间】:2013-02-19 09:27:51
【问题描述】:

访问多通道矩阵的第 i 行 channel::n 的语法是什么。我可以访问 channel::n 的 (i,j) 元素,但是使用 row、rowRange 等函数的语法是什么.....

示例代码:

Mat M(10, 3, CV_32SC3);
cout << M.at<Vec3d>(0,0)[1] << endl;  // This works
cout << M.row(0)[1] << endl;    // Syntax of this

【问题讨论】:

    标签: c++ opencv matrix mat


    【解决方案1】:
    Mat.row(0) returns a Mat, so it's the same game as before:
    
    // if it's really INT 3channels(like your ex. above), you have to use m.at<Vec3i> !!
    Mat M(10, 3, CV_32SC3);   
    
    // 3rd row
    Mat r = m.row(3);         
    
    // r has only 1 row (3 elems), last pixel there
    cout<< r.at<Vec3i>(0,2)[0];  
    

    【讨论】:

      【解决方案2】:

      我认为您正在搜索以下内容:

       cv::Mat M(10, 3, CV_32SC3);
       cv::Mat_<cv::Vec3d> helpimg = M;
       helpimg .row(0).begin()[0][0] = 2.5;
      

      我可以编译它,但我没有测试它。告诉它是否有效。您也可以使用它来获取 cols 值:

       helpimg .col(0).begin()[0][0] = 4.5;
      

      【讨论】:

      • 注意,mat.col(0) 做了一个深拷贝,所以helpimg .col(0).begin()[0][0] = 4.5; 不会改变 helpimg 的内容! (是的,row() 和 col() 是有区别的!)
      【解决方案3】:

      这样做怎么样:

       cout << M.row(0).col(1) << endl;  
      

      Mat::row 函数返回一个Mat,因此您可以在结果上再次调用rowcol 以从中获取您需要的行或列。

      【讨论】:

        猜你喜欢
        • 2015-08-07
        • 2018-01-03
        • 1970-01-01
        • 2011-09-17
        • 2014-05-13
        • 2023-03-30
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多