我想将下面的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/