Opencv全局二值化和局部二值化(python实现)
文章目录
- 1.前置知识
- (1).什么是形态学处理
- (2).形态学图像处理
- 2.二值化
- (1)全局二值化
- 1)函数
- 2)阈值类型
- 3)代码实战
- (2)局部二值化(自适应阈值)
- 1)函数
- 2)阈值类型
1.前置知识
(1).什么是形态学处理
形态学图像处理(简称形态学)是指一系列处理图像形状特征的图像处理技术,其基本思想是利用一些特殊的结构元来测量或提取图像中相应的形状和特征,以便进一步进行图像分析和处理。
(1)基于图形形态进行处理的一些基本方法;
(2)这些处理方法基本是对二进制图像进行处理;
(3)卷积核决定着图像处理后的效果;
https://zhuanlan.zhihu.com/p/110787009
(2).形态学图像处理
(1)顶帽;
(2)黑帽
2.二值化
(1)全局二值化
将图像的每个像素值变成两种值,如0,255;也就是将整个图像呈现出明显的黑白效果的过程。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。
1)函数
函数:threshold(src, thresh, maxval, type, dst=None)
:
Src:输入的原始图像;(最好是灰度图)
;
Thresh:设置的阈值
;
Maxval:当图像中的像素值大于该阈值时,使用maxval值代替
;
Type:阈值设置的类型
;
Dst:输出图像
;
2)阈值类型
这里分别对应上面的五种类型讲解
3)代码实战
import os
import cv2
import numpy as npdef Threshold(img_path='images/lenna.png'):img_src=cv2.imread(img_path)img=cv2.resize(src=img_src,dsize=(450,450))img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret,img=cv2.threshold(src=img,thresh=100,maxval=255,type=cv2.THRESH_BINARY)cv2.imshow('img_src',img_src)cv2.imshow('img',img)print('ret: {}'.format(ret))cv2.waitKey(0)cv2.destroyAllWindows()def detectTimeThreshold():cap=cv2.VideoCapture(0)while cap.isOpened():OK,frame=cap.read()img = cv2.resize(src=frame, dsize=(450, 450))img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, img = cv2.threshold(src=img, thresh=100, maxval=255, type=cv2.THRESH_BINARY)cv2.imshow('img', img)#获取鼠标和键值if cv2.waitKey(1)&0XFF==27:breakcap.release()cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')# Threshold()detectTimeThreshold()
(2)局部二值化(自适应阈值)
由于光照不均匀以及阴影的存在,只有一个阈值会使得在阴影处的白色被二值化为黑色,所以提出局部二值化。在局部范围内根据特定算法算出局部的阀值,这个局部的大小可以自己决定,例如5x5.本文所用的用法是局部平局的灰度值作为阀值。得到局部阀值再进行局部二值化处理。
1)函数
:adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
:
Src:输入的原始图像
;
maxValue;设置的阈值
;
adaptiveMehtod:计算阈值的方法
;
ADAPTIVE_THRESH_MEAN_C:计算邻近区域的平均值(窗口内的所有值求和取平均);
ADAPTIVE_THRESH_GAUSSIAN_C:高斯窗口加权平均值(越靠近中心的权重越高);
thresholdType;设置阈值的类型
;
blockSize:邻近区域的大小,如3,5,7
;
C:常量,应从计算出的平均值或加权平均值中减去
。
Dst:输出图像
;
2)阈值类型
T(x,y)是为每个像素单独计算的阈值。
import os
import cv2
import numpy as npdef adaptiveThreshold(img_path='images/lenna.png'):img_src=cv2.imread(img_path)img=cv2.resize(src=img_src,dsize=(450,450))img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)img=cv2.adaptiveThreshold(src=img,maxValue=100,adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C,thresholdType=cv2.THRESH_BINARY,blockSize=3,C=0)cv2.imshow('img_src',img_src)cv2.imshow('img',img)cv2.waitKey(0)cv2.destroyAllWindows()def detectTimeApativeThreshold():cap=cv2.VideoCapture(0)while cap.isOpened():OK,frame=cap.read()img = cv2.resize(src=frame, dsize=(450, 450))img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img = cv2.adaptiveThreshold(src=img,maxValue=100,adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C,thresholdType=cv2.THRESH_BINARY,blockSize=3,C=0)cv2.imshow('img', img)#获取鼠标和键值if cv2.waitKey(1)&0XFF==27:breakcap.release()cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')# adaptiveThreshold()detectTimeApativeThreshold()
Opencv全局二值化和局部二值化(python实现)相关推荐
- OpenCV局部阙值分割的自适应阙值算法
前言: 当图片中的照明出现不均匀的情况时,图像的灰度值就会出现灰度值不均匀,如果我们采用全局阙值分割,对所有像素值共用同一个阙值,往往无法得到理想的分割.而局部阙值分割则可以解决这个问题,它所提供的思 ...
- OpenCV全局/局部阀值二值化
1.概念 1.1全局二值化 根据自定义阀值对图像进行二值化处理,即灰度值大于阀值时设改像素灰度值为255,灰度值小于阈值时设该像素灰度值为0 1.2局部二值化 在局部范围内根据特定算法算出局部的阀值, ...
- 【OpenCV 4开发详解】图像二值化
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 例程200篇】37. 图像的灰度化处理和二值化处理
[OpenCV 例程200篇]37. 图像的灰度化处理和二值化处理 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 按 ...
- opencv学习1-3——通道变换,灰度化grayscale,二值化thresholding。
入手opencv,最好的方法就是对应着程序进行学习是一个很好的方法,通过一些单个程序来了解图形处理的一些知识.这篇文章将介绍下面三个小任务.通道变换,灰度化,普通二值化.本文以C++版本进行代码介绍. ...
- 基于堆栈二值化自动编码器和二值化神经的无约束人脸表情识别算法(An efficient unconstrained FERa based on BAEs and BNN)
摘要(abstract) 虽然深度学习在许多模式识别任务中都取得了良好的效果,但对于含有大量参数集.标记数据有限的深度网络,过拟合问题仍然是一个严重的问题.在这项工作中,二进制自动编码器(BAEs)和 ...
- matlab确定灰度阈值T,matlab灰度图像二值化【灰度图像二值化算法研究】
摘要: 在很多图像处理的过程中,经常需要对灰度图像进行二值化.本文对几种常用的图像二值化算法进行了阐述,并通过仿真,进行比较研究.根据实验结果,阐明了各种算法的优缺点. Abstract: The b ...
- 局部二值模式LBP的详细理解
局部二值模式LBP的噶几详细的理解 一个电脑小白的自我成长之路,总是这么的寂寞.孤独.无聊,却充满新奇.艰难,唯有坚韧不拔,持续奋斗,才可披荆斩棘.登临云端.各位看官们:"咋的,能不能上干货 ...
- 局部二值模式(Local Binary Patterns)纹理灰度与旋转不变性
Multiresolution Gray Scale and Rotation Invariant Texture Classification with Local Binary Patterns, ...
最新文章
- 艺术站-卡通和风格化的HDRI天空
- 【JVM调优】JVM指令集大全
- 洛谷 1658 购物
- mac怎么用python2和3_Mac同时安装python2和python3
- qq远程控制电脑方法_【技术分享】教你远程控制别人电脑
- js中return、return false 、return true各自代表什么含义
- 高通首席技术官:5G+AI是至关重要的组合
- C#的委托(delegate、Action、Func、predicate)
- Java常用开发工具推荐
- MATLAB 只是冰山一角!海外资深程序员聊被卡脖子……
- vmware虚拟机设置静态ip地址
- 设置了position: fixed; 并且能够左右滚动 #html #Css
- 9 ,zk 架构模型
- 又发现一个免费网盘分享给大家
- vue验证手机号、密码验证码、时间、机型、图片类型等
- 论文阅读之《Quasi-Unsupervised Color Constancy 》
- 007_NLP_Task6 利用Text-CNN模型来进行文本分类
- Hive中各种日期格式转换方法总结
- 【2021流量主】365王者打卡前后台源码
- 那些组织单位、公司需要做等级保护测评?
热门文章
- 网络测试工具——iperf3详细使用说明
- java编写动物乐园_编写动物乐园java,满意会加分的!!!
- fseek函数fread函数的用法
- 半自主实验室机器人推动探索物质世界
- 史上最小sql2005下载只有57.2M(含图形管理工具)
- python环境变量配置(win10+Python27)
- 如何培养真正的数据分析思维?附实践案例
- VUE+webrtc-streamer实现实时视频播放(监控设备-rtsp)
- JS高级程序设计【红宝书】学习笔记——数据类型
- locale java 繁体简体_Struts1实现国际化,实现多种语言(English,简体,繁体)