如何寻找合适图像的阈值是本节课的内容
图像二值化分割最重要的就是计算阈值
余值计算算法很多,基本分成两类,全局阈值和自适应阈值
全局分割方法
-均值法
-OTSU
-三角法(Trianagle)(生物医疗效果较好)
均值法
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat ss = imread("C:/newword/image/1.jpg");
if (ss.empty()) {
printf("没有检测到");
return -1;
}
namedWindow("原图", WINDOW_AUTOSIZE);
imshow("原图", ss);
Mat DK, JH;
cvtColor(ss, DK, COLOR_BGR2GRAY);
imshow("灰度", DK);
Scalar在多通道图像中具有三个通道,在灰度图像中只具有一个通道,这个通道是调节弧度图像亮度。当高于m[0]时则变为255小于是则为0
Scalar m = mean(DK);
printf("means:%.2f\n", m[0]);
threshold(DK, JH, m[0], 255, THRESH_BINARY);
imshow("均值", DK);
waitKey(0);
destroyAllWindows();
return 0;
}
在很多情况均值无法真实的反应图像像素的分布情况,直方图是统计信息,他可以真实的反应图像像素的分布情况
otsu(直方图)
double T1 = threshold(DK, JH, 0, 255, THRESH_BINARY|THRESH_OTSU);
imshow("直方图", JH);
double T2 = threshold(DK, JH, 0, 255, THRESH_BINARY | THRESH_TRIANGLE);
imshow("三角", JH);
printf("直方图:%.2f,三角:%.2f\n",T1,T2);