二值化的前提是灰度化,手动二值化需要不断进行调整,找到合适的阈值,大于阈值为白色。
大津二值化又叫最大类间方差法,可以自动确定二值化的阈值。基本思想是遍历阈值,当某个阈值下分割的两类像素点之间灰度方差最大的时候,就是最优的阈值。(因为类间方差越大,两类的差别越大,不管是前景错分到背景还是背景错分到前景都会使类间方差变小)。数学推导如下:

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>cv::Mat BGR2GRAY(cv::Mat img) {int width = img.cols;int height = img.rows;cv::Mat out = cv::Mat::zeros(height, width, CV_8UC1);//8位无符号灰度图像for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {//RGB分量取不同的权重out.at<uchar>(y, x) = 0.2126 *img.at<cv::Vec3b>(y, x)[2] \+ 0.7152 * img.at<cv::Vec3b>(y, x)[1] \+ 0.0722 * img.at<cv::Vec3b>(y, x)[0];}}return out;
}cv::Mat Binarize_Otsu(cv::Mat gray) {int width = gray.cols;int height = gray.rows;double w0 = 0, w1 = 0;//像素的比例double m0 = 0, m1 = 0;//像素的均值double max_sb = 0, sb = 0;int th = 0;int val;for (int t = 0; t < 255; t++) {w0 = 0;w1 = 0;m0 = 0;m1 = 0;//获取各类像素的个数 计算均值for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {val = (int)(gray.at<uchar>(y, x));if (val < t) {w0++;m0 += val;}else {w1++;m1 += val;}}}m0 /= w0;m1 /= w1;w0 /= (height * width);w1 /= (height * width);sb = w0 * w1 * pow((m0 - m1), 2);//计算类间方差if (sb > max_sb) {max_sb = sb;th = t;}}std::cout << "大津算法阈值:" << th << std::endl;cv::Mat out = cv::Mat::zeros(height, width, CV_8UC1);for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {// Binarizeif (gray.at<uchar>(y, x) > th) {out.at<uchar>(y, x) = 255;}else {out.at<uchar>(y, x) = 0;}}}return out;
}int main(int argc, const char* argv[]) {cv::Mat img = cv::imread("C:/Users/zxdn/Desktop/girl.jpg", cv::IMREAD_COLOR);cv::Mat gray = BGR2GRAY(img);cv::Mat out = Binarize_Otsu(gray);cv::imshow("原图", img);cv::imshow("大津二值化", out);cv::waitKey(0);cv::destroyAllWindows();return 0;
}

opencv大津算法二值化相关推荐

  1. OpenCV大津法二值化

    OpenCV大津法二值化 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化 ...

  2. opencv 大津算法讲解与实现

    大津算法原理 在 opencv 中对图像进行二值化的过程中我们可能会使用大津算法,大津算法的主要作用是分割前景与背景部分区域,先将图像灰度化,假设图像有 [0,255] 个灰度等级,在数学中有方差这个 ...

  3. opencv学习日志12-大津法二值化

    前言 这篇文章中主要讲述opencv中如何使用大津法对图像进行二值化操作. 一.大津法二值化 //第三题 大津法二值化 #include <opencv2/opencv.hpp> #inc ...

  4. OpenCV+python:图像二值化

    1,图像二值化概念及方法 一个像素点的颜色是由RGB三个值来表现的,所以一个像素点矩阵对应三个颜色向量矩阵,分别是R矩阵,G矩阵,B矩阵,它们也都是同样大小的矩阵. 在图像处理中,用RGB三个分量(R ...

  5. 用python怎么样实现图像二值化_使用Python+OpenCV如何实现图像二值化

    使用Python+OpenCV如何实现图像二值化 发布时间:2020-10-26 14:15:52 来源:亿速云 阅读:77 作者:蛋片鸡 这篇文章运用简单易懂的例子给大家介绍使用Python+Ope ...

  6. opencv学习笔记之二值化

    opencv学习笔记之二值化 1.什么是二值化 二值化,从名词意义上可以看出来,是将一共物体转化成两个值.二值即:0或255.即一个白色一个黑色.即一个图片经过二值化之后会显示成白色和黑色的形式. 2 ...

  7. 利用python opencv实现图像自适应二值化

    对灰度图像利用阈值得到一个二值化的图像,是常最常用的图像处理技术之一.例如,灰度大于127的图像设置为1.小于127的设置为0,这种处理便是固定阈值127的二值化处理. 自适应的二值化处理不同于固定阈 ...

  8. 使用openCV进行边缘检测、二值化、轮廓、轮廓检测、BGR、灰度图、二值化,专栏:各种openCV实践的案例

    专栏连接:openCV练习-各种openCV实践的案例 前言 使用OpenCV的轮廓检测,当我们加入对象的边界上的所有点时,我们得到一个轮廓. 通常,特定轮廓区域与边界像素有关,具有相似的颜色和强度. ...

  9. 机器视觉入门之路(六一,大用图像二值化,从静态到动态)

    机器视觉里,大多处理的是灰度图像,用了很久的黑白二值化,就是好用,却不知所以然,首先悟到的,是二分法,之后再无他想. 再次悟到,便是几年之后,或许是机缘巧合,对于块匹配,耿耿于怀(惦记)很久了,正是他 ...

  10. OpenCV全局/局部阀值二值化

    1.概念 1.1全局二值化 根据自定义阀值对图像进行二值化处理,即灰度值大于阀值时设改像素灰度值为255,灰度值小于阈值时设该像素灰度值为0 1.2局部二值化 在局部范围内根据特定算法算出局部的阀值, ...

最新文章

  1. 关于学习Python的一点学习总结(9->字典创建及相关操作)
  2. python3作用域
  3. 015 已接任务链表和任务库二叉树遍历
  4. 流行学习简单入门与理解
  5. java asin_Java asin()方法
  6. 使用rpm包安装mysql_centos下利用rpm包安装mysql
  7. 基础html交代选择器,html 选择器之基础选择器
  8. python数据文件格式p_python对NOAA天气数据格式转换
  9. Matplotlib库入门
  10. db2 控制台执行创建函数语句_Python函数定义及调用
  11. hadoop介绍及伪分布式搭建
  12. 刷题记录 kuangbin带你飞专题九:连通图
  13. 从零开始学PCR技术(三):PCR引物设计
  14. webqq机器人php,一步一步来做WebQQ机器人-(一)(验证码)
  15. uchome 数据字典详解
  16. PPT转图片(Java)
  17. 新手必备!最全电路基础知识讲解
  18. mysql数据库之mmm
  19. 计算几何基础--线段的性质
  20. 查询读者的借阅信息mysql_MySQL数据库命令行【篇章九】之数据库综合查询(SELECT)...

热门文章

  1. JSON转换问题最全详解(json转List,json转对象,json转JSONObject)
  2. java实现modbus rtu协议与 modscan等工具(2)
  3. 300 页干货!李宏毅《一天搞懂深度学习》(附下载)
  4. SWAT模型 建模方法、实例应用、高级进阶
  5. 手机pdf文件转语音_录音语音转文字手机版下载-录音语音转文字免费版下载v1.0.0...
  6. Chrome 下载文件出现已禁止
  7. oracle常见sql笔试题,一路SQL笔试题
  8. 人工神经网络基本构成有哪些,常见的人工神经网络有哪几种
  9. ppt如何替换其他mo ban_如何制作PPT教程:PPT排版格式技巧汇总
  10. 软件项目开发过程中应编写的十三类文档