C++ Matlab到OpenCV:值在某个范围内的像素掩码
我用这段Matlab代码找到像素的遮罩(C++ Matlab到OpenCV:值在某个范围内的像素掩码,c++,matlab,opencv,computer-vision,C++,Matlab,Opencv,Computer Vision,我用这段Matlab代码找到像素的遮罩(skin),其值在我的HSV图像的H和S通道的范围内HSV_im: h_range = [0.02 0.085]; s_range = [0.18 .754]; H = hsv_im(:,:,1); S = hsv_im(:,:,2); %targets skin by only selecting values within the rectangle skin range skin = (S>s_range(1) & S<s_
skin
),其值在我的HSV图像的H和S通道的范围内HSV_im
:
h_range = [0.02 0.085];
s_range = [0.18 .754];
H = hsv_im(:,:,1);
S = hsv_im(:,:,2);
%targets skin by only selecting values within the rectangle skin range
skin = (S>s_range(1) & S<s_range(2) & H>h_range(1) & H<h_range(2));
h_范围=[0.02 0.085];
s_范围=[0.18.754];
H=hsv_im(:,:,1);
S=hsv_im(:,:,2);
%仅通过选择矩形蒙皮范围内的值作为蒙皮的目标
skin=(S>S\u range(1)&Sh\u range(1)&H我假设您的imageHSV
的值在范围[0,1]
中,否则您只需要更改范围值。这是因为在Matlab中,图像通常在范围[0,1]中,而在OpenCV中则在范围[0255]中
实际上,对于HSV图像,这有点不同:
- 如果
imageHSV
属于CV_8UC3
类型,则范围为[0180]中的H
,[0255]中的S
和V
- 如果
imageHSV
的类型为cv32fc3
,则OpenCV的有效范围为:H
in[0360]、S
和V
in[0,1]
您可以使用。只需定义3个通道的下限和上限范围。注意更正OpenCV的Matlab范围:
Mat imgHSV = ... type should CV_32FC3
Mat skin;
inRange(imgHSV, Scalar(0.02, 0.18, 0), Scalar(0.085, 0.754, 1), skin);
// h s v h s v
// lower range upper range
// skin will be a binary mask of type CV_8UC1, with values either 0 or 255
Mat imgHSV = ... type should CV_32FC3
Mat skin;
inRange(imgHSV, Scalar(0.02, 0.18, 0), Scalar(0.085, 0.754, 1), skin);
// h s v h s v
// lower range upper range
// skin will be a binary mask of type CV_8UC1, with values either 0 or 255