MATLAB Logical Indexing 的 OpenCV

作者: YimianDai | 来源:发表于2015-09-15 22:18 被阅读151次

    这篇文章主要是 stackoverflow 上的一个问题 How To Index And Modify An OpenCV Matrix 的翻译。在 MATLAB 里,Logical Indexing 是非常常见的一种用法,具体示例如下:

    A = [1;2;3;1;2;3;1;2;3];
    A(A==1) = 0
    % Resulting in:
    % [0;2;3;0;2;3;0;2;3]
    

    在 OpenCV 里,Logical Indexing 的实现并不像 MATLAB 那样简洁,但也相差不大。setTo() 函数可以接受 cv::Mat 的逻辑运算,比如 ==!=,的结果作为参数,具体代码可见 OpenCV-and-CPP-for-MATLAB-Users Demo_OpenCVFunctions 文件夹下的 demo_setTo.cpp 函数,为了方便起见,将代码陈列如下:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    void demo_setTo()
    {
        uchar data[] = {1,2,3,1,2,3,1,2,3};
        //cv::Mat A(9, 1, CV_8UC1, data); // 1, 9 is also OK
        cv::Mat A(1, 9, CV_8UC1, data);
        std::cout<<"Before: A = "<<A<<std::endl;
        A.setTo(0, A == 1);
        std::cout<<"After: A = "<<A<<std::endl;
    }
    

    How To Index And Modify An OpenCV Matrix中,它是写成 A = A.setTo(0, A == 1); 这样的,但我觉得直接 A.setTo(0, A == 1); 就行了。

    本文是开源项目 OpenCV-and-CPP-for-MATLAB-Users 文档的一部分,更多的文章和完整代码请移步项目的 Github主页

    转载请注明出处。

    相关文章

      网友评论

        本文标题:MATLAB Logical Indexing 的 OpenCV

        本文链接:https://www.haomeiwen.com/subject/fudmcttx.html