python阈值计算_opencv python 图像二值化/简单阈值化/大津阈值法

pip install matplotlib

1简单的阈值化

cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表示如果像素值大于(有时小于)阈值则要给出的值. OpenCV提供不同类型的阈值,它由函数的第四个参数决定. 不同的类型是:

cv2.THRESH_BINARY

如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0

cv.THRESH_BINARY_INV

如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value

cv.THRESH_TRUNC

如果 src(x,y)>threshold,dst(x,y) = max_value; 否则dst(x,y) = src(x,y)

cv.THRESH_TOZERO

如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0

cv.THRESH_TOZERO_INV

如果 src(x,y)>threshold,dst(x,y) = 0 ; 否则dst(x,y) = src(x,y)

代码

importcv2importnumpy as npimportmatplotlib.pylab as plt

img= cv2.imread('lena.jpg',0)

ret,thresh1= cv2.threshold(img,127,255,cv2.THRESH_BINARY)

ret,thresh2= cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)

ret,thresh3= cv2.threshold(img,127,255,cv2.THRESH_TRUNC)

ret,thresh4= cv2.threshold(img,127,255,cv2.THRESH_TOZERO)

ret,thresh5= cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)

titles= ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']

images=[img, thresh1, thresh2, thresh3, thresh4, thresh5]for i in range(6):

plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')

plt.title(titles[i])

plt.xticks([]),plt.yticks([])

plt.show()

测试效果

2自适应阈值化

图像在不同区域具有不同照明条件时,应进行自适应阈值处理.因此,我们为同一图像的不同区域获得不同的阈值,并且它为具有不同照明的图像提供了更好的结果.

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst])

adaptiveMethod:决定如何计算阈值

cv2.ADAPTIVE_THRESH_MEAN_C:阈值是邻域的平均值

cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值的加权和,其中权重是高斯窗口

blockSize:决定了邻域的大小

C:从计算的平均值或加权平均值中减去的常数

importcv2importnumpy as npimportmatplotlib.pylab as plt

img= cv2.imread('lena.jpg',0)

img= cv2.medianBlur(img,5)

ret,th1= cv2.threshold(img,127,255,cv2.THRESH_BINARY)

th2= cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\

cv2.THRESH_BINARY,11,2)

th3= cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\

cv2.THRESH_BINARY,11,2)

titles= ['Original Image', 'Global Thresholding (v = 127)','Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']

images=[img, th1, th2, th3]for i in range(4):

plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')

plt.title(titles[i])

plt.xticks([]),plt.yticks([])

plt.show()

3 大津阈值法

根据双峰图像的图像直方图自动计算阈值。 (对于非双峰图像,二值化不准确。)

使用cv.threshold()但是传递了一个额外的标志v.THRESH_OTSU.对于阈值,只需传递零.然后算法找到最佳阈值并返回为第二个输出retVal。如果未使用Otsu阈值法,则retVal与之前使用的阈值相同.

在第一种情况下,将全局阈值应用为值127.在第二种情况下,直接应用了Otsu的阈值.在第三种情况下,使用5x5高斯内核过滤图像以消除噪声,然后应用Otsu阈值处理.

代码:

importcv2importnumpy as npimportmatplotlib.pylab as plt

img= cv2.imread('lena.jpg',0)#global thresholding

ret1,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)#Otsu's thresholding

ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#Otsu's thresholding after Gaussian filtering

blur = cv2.GaussianBlur(img,(5,5),0)

ret3,th3= cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#plot all the images and their histograms

images =[img, 0, th1,

img, 0, th2,

blur, 0, th3]

titles= ['Original Noisy Image','Histogram','Global Thresholding (v=127)','Original Noisy Image','Histogram',"Otsu's Thresholding",'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]for i in range(3):

plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')

plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])

plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)

plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])

plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')

plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奔腾双核linux服务器,Dell推出双核心奔腾服务器

来自业内的消息,Dell近日推出了一台采用Intel双核心 Pentium D的服务器,这将给小型服务器带来更强的运算能力。Dell PowerEdge SC430 主要面向小型企业客户,价格在499美元起。相比PowerEdge SC420,Dell为 PowerEdge SC430 装配了两…

EasyPlayerPro Windows流媒体播放器(RTSP/RTMP/HTTP/HLS/File/TCP/RTP/UDP都能播)发布啦

EasyPlayerPro简介 EasyPlayerPro是一款全功能的流媒体播放器,支持RTSP、RTMP、HTTP、HLS、UDP、RTP、File等多种流媒体协议播放、支持本地文件播放,支持本地抓拍、本地录像、播放旋转、多屏播放等多种功能特性,核心基于ffmpeg,稳…

github 思维导图开元软件_Mymind教学系列--Github上的免费且强大思维导图工具-(一)...

How many 0‘s?Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 2844Accepted: 1506DescriptionA Benedict monk No.16 writes down the decimal representations of all natural numbers between and including m and n, m ≤ n. How many 0‘s will he write dow…

linux jlink软件安装,LINUX下安装JLINK

确认是否安装libusb$ dpkg -l | grep libusb如果有libusb相关信息,说明已经安装了$ dpkg -l | grep libusbii libusb-0.1-4 2:0.1.12-20 userspace USB programming libraryii libusb-1.0-0 2:1.0.9~rc3-2ubuntu1 userspace USB programming libraryii libusb-dev 2…

tcpdump记录

tcpdump -i eth0 -nn -A -X host 192.168.20.82 and port 9080 -i:interface 监听的网卡。-nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。-A:以ascii的方式显示数据包,抓取web数据时很有用。…

abortonerror_如何在多项目目录顶层的Android Gradle Plugin中禁用lint abortOnError

我有一个顶级的Android Gradle项目.这个项目下面嵌套了多个子项目(有时它们是2级深),即:top level project|project1vendor libraries|lib1lib2lint正在中断一些图书馆项目的建设.我可以编辑每个图书馆项目的build.gradle来解决问题android {lintOptions {abortOnEr…

linux权限源码分析,Linux基础之文件权限详解

Linux中对于权限的制定虽然没有Windows的那么精细,但是如果你了解并掌握Linux中文件的权限知识,也可以像Windows那样对权限做到精确配置。Linux中的文件权限是什么?如何查看Linux中的文件权限[[email protected] test]# ll -d /test/drwxr-xr…

Vue工程模板文件 webpack打包

1、github github地址:https://github.com/MengFangui/VueProjectTemplate 2、webpack配置 (1)基础配置webpack.base.config.js const path require(path); //处理共用、通用的js const webpack require(webpack); //css单独打包 const Ext…

flutter的按钮如何变为不可选中_如何在Flutter中禁用按钮?

小编典典我想你可能要出台一些辅助功能,以build您的按钮,以及与一些属性键关机的沿有状态的部件。使用StatefulWidget / State并创建一个变量来保存您的条件(例如isButtonDisabled)最初将其设置为true(如果您要这样做)呈现按钮时,请勿将onPre…

linux下toe网卡驱动,toe命令是干什么的,有没有大神解答一下

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼[lHP14 ~]$ toe -as--> /etc/terminfo----> /usr/share/terminfo--*-: Eterm Eterm with xterm-style color support (X Window System)--*-: Eterm-256color Eterm with xterm 256-colors--*-: Eterm-88color Eterm with 88…

ALSA声卡笔记2---ASoC驱动框架

1、简单了解一下ASOC 在嵌入式系统里面的声卡驱动为ASOC(ALSA System on Chip) ,它是在ALSA 驱动程序上封装的一层 分为3大部分,Machine,Platform和Codec ,三部分的关系如下图所示:其中Machine是指我们的…

举例说明语言接触会造成哪些结果_语言学概论全真模拟演练(二)

第一部分选择题(30分)一、单项选择题(本大题共20小题,每小题1分,共20分。在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内,错选、多选或来选均无分。)1.语言符号可变性的根本原因在于语言符号的…

linux下ceontab不起作用,linux下crontab 不能执行的原因

1.相关sh文件没有x权限2.相关sh文件中,不包含如下的信息:[oracleleiredhat u01]$ cat job.shexport ORACLE_BASE/u01/app/oracleexport ORACLE_HOME/u01/app/oracle/oracle/product/10.2.0/db_1PATH/u01/app/oracle/oracle/product/10.2.0/db_1/bin:$PAT…

drive下载 synology_群晖 Synology Drive 的安装与使用

首先进入“套件中心”,然后在搜索框中输入“drive”,出现的结果中能看到需要安装的套件了,点击“立即安装”即可,剩下就是确认和下一步,如图:当然我们也要安装安装完后该套件会四个选项:立即打开…

dev_open linux,linux 伪终端设备 /dev/ptmx

伪终端(pseudoterminal): ptmx, pts (伪终端master和伪终端slave)./dev/ptmx用于创建伪终端主从设备对.当我们用open打开/dev/ptmx设备后, 返回主设备的文件描述符,并且在/dev/pts/目录下创建一个伪终端从设备.在成功打开/dev/ptmx后, 可以通过函数ptsname()来获取从设备的path…

fetch git pull 切换_git fetch git pull

解析.git文件夹进入正题之前,我们先来看看.git文件夹1.config配置文件[core]repositoryformatversion 0filemode truebare falselogallrefupdates truesharedRepository group[remote "origin"]url https://xxx/xxx/xxx.gitfetch refs/heads/*:ref…

C语言对stm32f103程序,STM32F103WIFI程序C语言

《STM32F103WIFI程序C语言》由会员分享,可在线阅读,更多相关《STM32F103WIFI程序C语言(33页珍藏版)》请在人人文库网上搜索。1、实用标准文案 AP模式 AP的SSID : ATWAP11BG,LAUVAN(SSID),CHI AP的KEY: : ATWAKEYWPA2PSK,AES,22222222 AP模式&…

python之路_自定义属性、json及其他js补充

一、自定义属性 我们知道,在前端页面渲染的过程中,我们可能会需要用到一些后端传来的参数,这种参数的获取我们一般是通过模板语言渲染得到。但是当这些参数是在js文件中被用到(js代码若是单独以文件形式被引用,模板语言…

python中类型错误、计数不采用关键字的错误怎么改_Python设计错误

你要求链接或其他来源,但实际上没有。这些信息散布在许多不同的地方。什么才是真正构成设计错误的因素?您是只考虑语言定义中的语法和语义问题,还是包括诸如平台和标准库问题以及特定实现问题等实用问题?您可以说,从性…

C语言打印日历总结报告,C语言打印日历

应同学的要求,写了个日历,输入年份,输出12个月份的日历表,代码如下 :#includebool isLeap(int year){if((year%40 && year%100!0) || (year%4000))return 1;elsereturn 0;}void printCalendar(int year){int d…