对理论感兴趣的同学可以参考 基于局部otsu分割与hough变换的海天线检测 这边文献,我的代码是依据该文献实现的。
IDE:vs2015
依赖项:opencv 3.x
一.对图像做中值滤波
opencv现成的函数
cv::Mat src1 = imread("test1.png");
cv::Mat srcGray;
//转换为二值图像
cvtColor(src1, srcGray, CV_BGR2GRAY);
//中值滤波,过滤噪声
medianBlur(srcGray, srcGray, 3);
二、otsu图像分割
//otsu 最大类间距算法,通过灰度直方图,找出阈值。
//类似k-means 聚类算法
int otsu(cv::Mat image)
{
assert(!image.empty());
int width = image.cols;
int height = image.rows;
int x = 0, y = 0;
int pixelCount[256];
float pixelPro[256];
int i, j, pixelSum = width * height, threshold = 0;
uchar* data = (uchar*)image.data;
//初始化
for (i = 0; i < 256; i++)
{
pixelCount[i] = 0;
pixelPro[i] = 0;
}
//统计灰度级中每个像素在整幅图像中的个数
for (i = y; i < height; i++)
{
for (j =