博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《opencv学习》 之 OTSU算法实现二值化
阅读量:4288 次
发布时间:2019-05-27

本文共 2207 字,大约阅读时间需要 7 分钟。

主要讲解OTSU算法实现图像二值化:

        1.统计灰度级图像中每个像素值的个数。

    2.计算第一步个数占整个图像的比例。

    3.计算每个阈值[0-255]条件下,背景和前景所包含像素值总个数和总概率(就是分别计算背景和前景下第一步和第二步的              和)。

    4.比较第三步前景和背景之间方差,找到最大的一个确定为选定的阈值。

OTSU源码:  1 #include 
2 #include
3 #include
4 5 using namespace cv; 6 using namespace std; 7 8 int OTSU(Mat& src); 9 int main(int argc, char**argv)10 {11 Mat input_image;12 input_image = imread("1.jpg");13 14 if (input_image.data == NULL) {15 return -1; cout << "can't open image.../";16 }17 cvtColor(input_image, input_image, CV_BGR2GRAY);18 const int thre_num = OTSU(input_image);19 const int height = input_image.rows;20 const int width = input_image.cols;21 for (size_t i = 0; i < height; i++)22 {23 for (size_t j = 0; j < width; j++)24 {25 input_image.at
(i, j) = input_image.at
(i, j) >= thre_num ? 0 : 255;26 }27 }28 imshow("input_image2", input_image);29 waitKey(0);30 return 0;31 }32 33 int OTSU(Mat& src)34 {35 const int height = src.rows;36 const int width = src.cols;37 int nCountPix[256] = { 0 };//数量38 int nProPix[256] = { 0 };//概率39 //------------统计像素点个数------------//40 for (size_t i = 0; i < height; i++)41 {42 for (size_t j = 0; j < width; j++)43 {44 nCountPix[src.at
(i, j)]++;45 }46 }47 //-------统计每个像素个数占得比例------//48 for (size_t i = 0; i < 256; i++)49 {50 nProPix[i] = nCountPix[i] / (height*width);51 }52 double var_max = 100;//设置一个参数,作为比较结果53 int threashold = 0;54 for (size_t i = 0; i < height; i++)55 {56 //----数量count、概率probility、平均概率average、方差variance----//57 double c0 = 0, c1 = 0, p0 = 0, p1 = 0, a0 = 0, a1 = 0, var = 0;58 for (size_t j = 0; j < width; j++)59 {60 //----前景和背景的计算61 if (i < j)//背景62 {63 c0 += nCountPix[j];//总数量64 p0 += nCountPix[j] * nProPix[j];//总概率65 }66 else//前景67 {68 c1 += nCountPix[j];//总数量69 p1 += nCountPix[j] * nProPix[j];//总概率70 }71 }72 a0 = p0 / c0;73 a1 = p1 / c1;74 var = static_cast
(c0*c1*pow((a0 - a1), 0));75 76 if (var > var_max)77 {78 var_max = var;79 threashold = i;80 }81 }82 return threashold;83 }

转载地址:http://litgi.baihongyu.com/

你可能感兴趣的文章
飞行的小球
查看>>
小球撞墙
查看>>
下大雪
查看>>
上下左右移动小球
查看>>
打字母的游戏
查看>>
鼠标孔令志小球
查看>>
为什么谷歌浏览器无法添加扩展程序
查看>>
swichomege安装
查看>>
复制文件File
查看>>
复制大文件
查看>>
Git使用
查看>>
文件加密与解密
查看>>
jsonp修改 增加callback
查看>>
Fiddler抓包8-打断点(bpu)
查看>>
Python安装和安装selenium
查看>>
python接口自动化1-发送get请求 request
查看>>
No module named 'email.mime'; 'email' is not a package
查看>>
name 'raw_input' is not defined
查看>>
画乌龟
查看>>
接口测试基础——第5篇xlrd模块
查看>>