《opencv学习》 之 OTSU算法实现二值化
主要讲解OTSU算法实现图像二值化:
1.统计灰度级图像中每个像素值的个数。
2.计算第一步个数占整个图像的比例。
3.计算每个阈值[0-255]条件下,背景和前景所包含像素值总个数和总概率(就是分别计算背景和前景下第一步和第二步的 和)。
4.比较第三步前景和背景之间方差,找到最大的一个确定为选定的阈值。
OTSU源码:
1 #include <opencv2/opencv.hpp>
#include <iostream>
#include <windows.h> using namespace cv;
using namespace std; int OTSU(Mat& src);
int main(int argc, char**argv)
{
Mat input_image;
input_image = imread("1.jpg"); if (input_image.data == NULL) {
return -; cout << "can't open image.../";
}
cvtColor(input_image, input_image, CV_BGR2GRAY);
const int thre_num = OTSU(input_image);
const int height = input_image.rows;
const int width = input_image.cols;
for (size_t i = ; i < height; i++)
{
for (size_t j = ; j < width; j++)
{
input_image.at<uchar>(i, j) = input_image.at<uchar>(i, j) >= thre_num ? : ;
}
}
imshow("input_image2", input_image);
waitKey();
return ;
} int OTSU(Mat& src)
{
const int height = src.rows;
const int width = src.cols;
int nCountPix[] = { };//数量
int nProPix[] = { };//概率
//------------统计像素点个数------------//
for (size_t i = ; i < height; i++)
{
for (size_t j = ; j < width; j++)
{
nCountPix[src.at<uchar>(i, j)]++;
}
}
//-------统计每个像素个数占得比例------//
for (size_t i = ; i < ; i++)
{
nProPix[i] = nCountPix[i] / (height*width);
}
double var_max = ;//设置一个参数,作为比较结果
int threashold = ;
for (size_t i = ; i < height; i++)
{
//----数量count、概率probility、平均概率average、方差variance----//
double c0 = , c1 = , p0 = , p1 = , a0 = , a1 = , var = ;
for (size_t j = ; j < width; j++)
{
//----前景和背景的计算
if (i < j)//背景
{
c0 += nCountPix[j];//总数量
p0 += nCountPix[j] * nProPix[j];//总概率
}
else//前景
{
c1 += nCountPix[j];//总数量
p1 += nCountPix[j] * nProPix[j];//总概率
}
}
a0 = p0 / c0;
a1 = p1 / c1;
var = static_cast<double>(c0*c1*pow((a0 - a1), )); if (var > var_max)
{
var_max = var;
threashold = i;
}
}
return threashold;
}


《opencv学习》 之 OTSU算法实现二值化的更多相关文章
- [iOS OpenCV的使用,灰度和二值化]
看网上方法很多,但版本都不够新,我看了网上一些知识,总结了下,来个最新版Xcode6.1的. 最近主要想做iOS端的车牌识别,所以开始了解OpenCV.有兴趣的可以跟我交流下哈. 一.Opencv的使 ...
- Python+OpenCV图像处理(十)—— 图像二值化
简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...
- [转载+原创]Emgu CV on C# (四) —— Emgu CV on 全局固定阈值二值化
重点介绍了全局二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数) 1.概述 图像二值化是图像处理中的一项基本技术,也 ...
- 10、OpenCV Python 图像二值化
__author__ = "WSX" import cv2 as cv import numpy as np #-----------二值化(黑0和白 255)---------- ...
- 二值化函数cvThreshold()参数CV_THRESH_OTSU的疑惑【转】
查看OpenCV文档cvThreshold(),在二值化函数cvThreshold(const CvArr* src, CvArr* dst, double threshold, double max ...
- c#数字图像处理(二)彩色图像灰度化,灰度图像二值化
为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法,很容易移植到彩色图像上.24位彩色图像每个像素用3个字节表示,每个字节对应着R.G.B分量的亮度(红.绿 ...
- C#图片灰度处理(位深度24→位深度8)、C#图片二值化处理(位深度8→位深度1)
C#图片灰度处理(位深度24→位深度8) #region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> / ...
- OpenCV图像的全局阈值二值化函数(OTSU)
cv::threshold(GrayImg, Bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//灰度图像二值化 CV_THRESH_OTSU是提取图像最 ...
- Opencv实现图像的灰度处理,二值化,阀值选择
前几天接触了图像的处理,发现用OPencv处理确实比較方便.毕竟是非常多东西都封装好的.可是要研究里面的东西,还是比較麻烦的,首先,你得知道图片处理的一些知识,比方腐蚀,膨胀,仿射,透射等,还有非常多 ...
随机推荐
- hdu2088
hdu2088 #include<stdio.h> #include<algorithm> using namespace std; ]; int main(){ ; ){ , ...
- 【HAOI2010】订货
可以DP也可以是费用流,然而被我用非常简单的DP破了[开心] 原题: 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定 ...
- vulcanjs 简单package 编写
vulcanjs 功能是以包进行管理,包里面包含了运行依赖的组件以及对于路由的注册 参考项目 项目结构 ├── README.md ├── license.md ├── package-lock.js ...
- WebApi_使用技巧
1.自动生成帮助文档 http://www.shaoqun.com/a/234059.aspx 2.Json序列化循环引用的问题http://www.mamicode.com/info-detail ...
- PHP写的手机端网站,可以打包成app吗,怎么打包?
8:13:36 沐歌-重庆 2018/1/19 8:13:36 PHP写的手机端网站,可以打包成app吗,怎么打包 风太大-淮安 2018/1/19 8:14:58 变色龙 沐歌-重庆 一般用什么打包 ...
- 二、Jmeter录制脚本过程及Could not create script recorder报错、您的连接不是私密连接报错
两个报错:Could not create script recorder报错和您的连接不是私密连接报错 1.录制过程 * 打开jmeter * 点击Templated,选择Recoding模版 * ...
- 编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类
图 1 一.从图1发现了什么问题呢? 答案:1.参数传的的太多了:2.另外注释也没写好. 说明:一个方法中,传参数的数量最好不要超过5个. 应该采用:struct或class,或一个字典类都行.其中 ...
- Exchange 2003服务器中如何在公司资料夹中设置共享行事历
Exchange 2003服务器中如何在公司资料夹中设置共享行事历 编写人:左丘文 2018-2-23 春节假期归来,开工第一天,感觉还没有从假期中恢复及调整过来.突然想到了我已经荒废了近一年的园子, ...
- 捕获长时间不提交的SQL语句
/* Formatted on 2014/5/19 17:16:16 (QP5 v5.240.12305.39476) */ SELECT s.sid, s.serial#, ss.sql_text ...
- bzoj1034 泡泡堂
Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...