图像二值化


图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。

在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。

所使用的阈值,结果图片 = cv.threshold(img,阈值,最大值,类型)
THRESH_BINARY 高于阈值改为255,低于阈值改为0
THRESH_BINARY_INV 高于阈值改为0,低于阈值改为255
THRESH_TRUNC 截断,高于阈值改为阈值,最大值失效
THRESH_TOZERO 高于阈值不改变,低于阈值改为0
THRESH_TOZERO_INV 高于阈值该为0,低于阈值不改变

简单阈值


示例代码

import cv2 as cv# 读取图像
img = cv.imread("assets/car.jpg",cv.IMREAD_GRAYSCALE)
# 显示图片
cv.imshow("gray",img)
# 获取图片信息
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]# 定义阈值
thresh = 60for row in range(height):for col in range(width):# 获取当前灰度值grayValue = img[row,col]if grayValue>thresh:img[row,col]=255else:img[row,col]=0# 直接调用api处理 返回值1:使用的阈值, 返回值2:处理之后的图像
# ret,thresh_img = cv.threshold(img, thresh, 255, cv.THRESH_BINARY)# 显示修改之后的图片
cv.imshow("thresh",img);cv.waitKey(0)
cv.destroyAllWindows()

自适应阈值


我们使用一个全局值作为阈值。但是在所有情况下这可能都不太好,例如,如果图像在不同区域具有不同的照明条件。在这种情况下,自适应阈值阈值可以帮助。这里,算法基于其周围的小区域确定像素的阈值。因此,我们为同一图像的不同区域获得不同的阈值,这为具有不同照明的图像提供了更好的结果。

除上述参数外,方法cv.adaptiveThreshold还有三个输入参数:

adaptiveMethod决定阈值是如何计算的:

  • cv.ADAPTIVE_THRESH_MEAN_C:该阈值是该附近区域减去恒定的平均Ç。
  • cv.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值减去常数C的高斯加权和。

BLOCKSIZE确定附近区域的大小和Ç是从平均值或附近的像素的加权和中减去一个常数。

示例代码

import cv2 as cv# 读取图像
img = cv.imread("assets/thresh1.jpg",cv.IMREAD_GRAYSCALE)
# 显示图片
cv.imshow("gray",img)
# 获取图片信息
imgInfo = img.shape# 直接调用api处理 参数1:图像数据 参数2:最大值  参数3:计算阈值的方法, 参数4:阈值类型 参数5:处理块大小  参数6:算法需要的常量C
thresh_img = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,11,5)# 显示修改之后的图片
cv.imshow("thresh",thresh_img);cv.waitKey(0)
cv.destroyAllWindows()

大津算法(THRESH_OTSU)


在计算机视觉和图像处理中,大津二值化法用来自动对基于聚类的图像进行二值化, 或者说,将一个灰度图像退化为二值图像。被认为是图像分割中阈值选取的最佳算法,采用这种算法的好处是执行效率高!

示例代码

import cv2 as cv# 读取图像
img = cv.imread("assets/otsu_test.png",cv.IMREAD_GRAYSCALE)
cv.imshow("src",img)ret,thresh_img = cv.threshold(img, 225, 255, cv.THRESH_BINARY_INV)
cv.imshow("normal", thresh_img);gaussian_img = cv.GaussianBlur(img,(5,5),0)
cv.imshow("g",gaussian_img)ret,thresh_img = cv.threshold(gaussian_img, 0, 255, cv.THRESH_BINARY|cv.THRESH_OTSU)
cv.imshow("otsu", thresh_img);print("阈值:",ret)
cv.waitKey(0)
cv.destroyAllWindows()

OpenCV机器视觉-图像二值化相关推荐

  1. Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法

    Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录

  2. OpenCv之图像二值化(笔记12)

    # 图像处理中,Thresholding中文翻译过来叫二值化或者阈值化.二值化就是把图片转换成只有white赫尔black这俩种颜色.通过Thresholding,可以让图片中感兴趣 # 的颜色编程主 ...

  3. Opencv教程-图像二值化

    图像二值化的概念 图像二值化是指将指将256阶的灰度图通过合适的阈值,转换为黑白二值图.即像素或0和255.其目的通常为将图像的前后景进行分割,使图像变得简单,数据量减小,能凸显出感兴趣的目标的轮廓. ...

  4. opencv java图像二值化处理

    1.threshold方法: Imgproc.threshold(Mat src, Mat dst, double thresh, double maxval, int type) 参数: src 原 ...

  5. opencv实现图像二值化(直接确定或滑杆调节)

    一.滑杆调节版-- #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #inclu ...

  6. OpenCV-Python 图像二值化

    OpenCV-Python 图像二值化 一.什么是图像二值化 二.图像二值化 Ⅰ先获取阈值: Ⅱ根据阈值去二值化图像 ⅢOpenCV中的二值化方法 三.全局阈值函数cv2.threshold · 函数 ...

  7. OpenCV+python:图像二值化

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

  8. 【OpenCV 4开发详解】图像二值化

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...

    python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...

最新文章

  1. rails的一些问题
  2. 《IT咨询指南》读书笔记一开卷 前言
  3. 绘图: matplotlib Basemap简介
  4. shell实例第12讲:给定目录找出包含关键字的文件
  5. Gmapping——从原理到实践
  6. win2003 定时重启BAT
  7. 内核模块编程之入门(二)—必备知识
  8. 【LeetCode】【HOT】208. 实现 Trie (前缀树)
  9. Web前端Javascript笔记(5)事件
  10. 高数复习: 多元函数微分学及其应用
  11. Unicode(全世界每个国家字符的唯一编码0x000000 到 0x10FFFF)与UTF-8的区别
  12. 服务器搭建免流系统,国内服务器搭建免流
  13. 2021年数据泄露成本报告解读
  14. 中国工业大数据行业发展趋势分析与投资战略规划建议报告2022-2028年版
  15. PX4多传感器优先级判断
  16. 示波器探头x10、x1挡位
  17. Neo4j安装及简单使用
  18. 华为软件开发云如何为数字经济时代赋能?
  19. Linux应用开发学习路线图
  20. 计算机毕业设计Java医护人员排班系统(源码+系统+mysql数据库+Lw文档)

热门文章

  1. 帝威龙远程遥控电动车 史无前例的伟大创新
  2. POI实现合并后居中
  3. software foundations LF Tactics
  4. vue3+SuperMap iClient3D for Cesium实现淹没分析功能
  5. java猜字母游戏_JAVA编程题-用java编写猜字母游戏
  6. 【第五期】PCB与艺术的完美结合,独特而美丽!
  7. diameter协议栈_Diameter协议学习笔记一(协议介绍)
  8. 非root用户安装python_zzw_非root用户安装python3.5
  9. Linux中shell常用的基础命令
  10. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include pch.h”