我想将下面的Matlab代码更改为OpenCV。如何使用“拆分”执行此操作?

我可以直接剪切并粘贴“for”循环吗?

L = lab(:,:,1);
a = lab(:,:,2);
b = lab(:,:,3);

[a1, b1] = size(a);

for row=1:a1
    for col=1:b1
        if ((a(row,col) <-0.196) && (a(row,col)>-0.3529) && (b(row,col)>0.1568) && (b(row,col)<0.392))
            II(row,col) = 1 ;
        else
            II(row,col) = 0 ;
        end
    end
end

最佳答案

您可以使用split函数

    cv::Mat bgrImage = imread("C:/temp/cool_cat.jpg");
    cv::Mat labImage;
    cvtColor(bgrImage, labImage, CV_BGR2Lab);
    //split the channels
    vector<cv::Mat> lab_channels;
    cv::split(labImage, lab_channels);

    //verbose indexes for split LAB channels
    const int L = 0;
    const int A = 1;
    const int B = 2;

    //nicer than for loop IMHO
    cv::Mat_<bool> t1a,t2a,t1b, t2b;
    t1a = lab_channels[A] < 200;
    t2a = lab_channels[A] > 100;
    t1b = lab_channels[B] < 200;
    t2b = lab_channels[B] > 100;

    cv:Mat_<bool> II = t1a & t2a & t1b & t2b;

cool cat image

关于c++ - 如何提取图像 channel OpenCV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25518310/

10-14 13:20
查看更多