阈值操作
图像阈值化就是利用图像像素点的分布规律,设定阈值进行像素点分割,对图像中的像素做出取舍和决策。阈值可以作为简单的图像分割方法。
官方教程
大神教程
阈值操作:
threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
参数:
src_gray: 输入的灰度图像的地址。
dst: 输出图像的地址。
threshold_value: 进行阈值操作时阈值的大小。
max_BINARY_value: 设定的最大灰度值(该参数运用在二进制与反二进制阈值操作中)。
threshold_type: 阈值的类型。从上面提到的5种中选择出的结果。
自适应阈值操作:
#图像自适应阈值二值化函数
cv::adaptiveThreshold(srcGray, dstImage,maxVal, adaptiveMethod,thresholdType, blockSize,constValue);
参数:
srcGray:源图像
dstImage:输出图像,与源图像大小一致
maxVal:进行阈值操作时阈值的大小。
adaptiveMethod:在一个邻域内计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C 。
ADAPTIVE_THRESH_MEAN_C的计算方法是计算出领域的平均值再减去第七个参数double C的值
ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出领域的高斯均值再减去第七个参数double C的值
thresholdType:这是阈值类型,只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV 。这两个参数的意义如下:
blockSize:adaptiveThreshold的计算单位是像素的邻域块,邻域块取多大,就由这个值作决定。
constValue:在对参数int adaptiveMethod的说明中,我已经说了这个参数的作用,从中可以看出,这个参数实际上是一个偏移值调整量。
图像掩膜
简介
图像掩模主要用于:
①提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
②屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
③结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
④特殊形状图像的制作。
应用函数
(1)、inRange 函数将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0),该功能类似于之间所讲的双阈值化操作。
void inRange(InputArray src, InputArray lowerb,InputArray upperb, OutputArray dst);
(2)、Scalar 设置BGR通道颜色
typedef struct Scalar
{
double val[4];
}Scalar;
(3)、image.copyTo(redback, mask);//原图(image)与掩膜(mask)进行与运算后覆盖到目标图(reback)
src.copyTo(dst, mask);
(4)、示例
void inrange_Demo(Mat& image){
Mat hsv, mask;
cvtColor(image, hsv, COLOR_BGR2HSV);
//将在两个阈值内的像素值设置为白色 (255),而不在阈值区间内的像素值设置为黑色(0)
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
imshow("mask", mask);
Mat redback = Mat::zeros(image.size(), image.type());
redback = Scalar(40, 40, 200);
bitwise_not(mask, mask);//图像非操作 ~1=0,~0=1
imshow("~mask", mask);
image.copyTo(redback, mask);//原图(image)与掩膜(mask)进行与运算后覆盖到目标图(reback)
imshow("redback", redback);
}
给图像添加边界
copyMakeBorder( src, //原图像
dst, top, bottom, left, right, //各边界的宽度,此处定义为原图像尺寸的5%
borderTye, //边界类型,此处可以选择常数边界或者复制边界
value ); //如果 borderType 类型是 BORDER_CONSTANT, 该值用来填充边界像素
BORDER_CONSTANT: 使用常数填充边界 (i.e. 黑色或者 0)
BORDER_REPLICATE: 复制原图中最临近的行或者列。