threshold()是图像处理里经常使用的函数,功能很多。
我们使用反二进制阈值化,作用有两点,一生成二值图像,二增强边缘图像的可视化效果。
API函数:
//固定阈值操作
double threshold(InputArray src,//输入图像,单通道
OutputArray dst,//输出图像
double thresh,//阈值的具体值
double maxval,//最大值,生成二值图时用到
int type);//阈值类型
//常用的两种阈值化类型
//THRESH_BINARY = 0, 阈值化处理生成二值图像
//THRESH_BINARY_INV = 1, 阈值化处理并反转生成二值图像
一、c++示例代码
//包含头文件
#include <opencv2/opencv.hpp>
//命名空间
using namespace cv;
using namespace std;
//全局函数声明部分
//主函数
int main()
{
//【1】载入图像,灰度化
Mat image = imread("F:\\opencvtest\\testImage\\beauty.png", 0);
//【2】检查是否载入成功
if (image.empty())
{
printf("读取图片错误,请确认目录下是否有imread函数指定图片存在! \n ");
return 0;
}
//【3】拉普拉斯算子
Mat laplacianImage;//拉普拉斯算子边缘图
Laplacian(image, laplacianImage, CV_8U);
//【4】阈值化,加以反转增加可视化效果
Mat thresholdedImage;//阈值化后的二值图
threshold(laplacianImage, thresholdedImage, 0.1, 255, THRESH_BINARY_INV);
//【5】显示图像
imshow("09-拉普拉斯算子边缘图", laplacianImage);
imshow("09-阈值化后的二值图", thresholdedImage);
//【6】保持窗口显示
waitKey(0);
return 0;
}
二、运行截图
1.拉普拉斯算子求得的边缘图
2.阈值化后的二值图,加以反转增加可视化效果。我们发现边缘增加了很多!!!
这是因为拉普拉斯算子对噪声很敏感,而且它有零交点特性,导致边缘很多!
在之后我们会使用梯度算子求取边缘图~