OpenCV在MATLAB中的等效阈值函数

时间:2014-11-28 15:45:23

标签: matlab opencv image-processing

MATLAB中cv2.thresholdcv2.inRange的等价物是什么?

1 个答案:

答案 0 :(得分:1)

让我们一次解决一个问题:

cv2.threshold

最接近的等价物是使用im2bw。这会根据您指定的强度级别对图像进行阈值处理。但是,im2bwcv2.threshold相比有什么不同之处在于不能指定输出阈值的值。 im2bw假定它是二进制1.因此,如果要将其转换为不同的值,则需要将图像转换为uint8(或者图像的任何数据类型) ,然后将任何1的位置设置为您希望的任何值。因此,假设您的图片已加载imread且图片名为imlevel是您想要达到阈值的阈值级别,maxval是最终输出你想要每个阈值像素的值,你会这样做:

out = im2bw(im, level/255);
out = uint8(out);
out(out == 1) = maxval;

值得注意的是,[0,1]之间的阈值级别规范化。我除以255,因为大多数图像都是uint8,因此除以255会使范围达到[0,1]cv2.threshold也可通过Otsu进行阈值处理。您可以通过graythresh在MATLAB中执行此操作。 graythresh将提供[0,1]之间的最佳阈值,您可以直接输入im2bw。因此:

out = im2bw(im, graythresh(im));
out = uint8(out);
out(out == 1) = maxval;

cv2.inRange

MATLAB本身不支持此功能。您需要做的是拍摄图像的每个平面(只有一个用于灰度,三个用于颜色),并单独检查是否有像素在有效范围内。如果有,您可以将其设置为逻辑true。因此,对于灰度图像,您可以执行以下操作:

minval = ...; %// Define minimum value here
maxval = ...; %// Define maximum value here

out = (im >= minval & im <= maxval);

对于彩色图像,您可以执行以下操作:

minval = ...; %// Define three element vector here for each colour plane i.e. [0 128 128];
maxval = ...; %// Define three element vector here for each colour plane i.e. [0 128 128];

out = true(size(im,1), size(im,2));
for p = 1 : 3
    out = out & (im(:,:,p) >= minval(p) & im(:,:,p) <= maxval(p));
end

我们在这里做的是逐行飞行并检查每个颜色平面是否在minvalmaxval中每个元素指定的范围内。一旦我们找到一个超出任何颜色平面范围的像素,我们就会将此位置设置为false


祝你好运!