python实现批量图像二值化

阅读: 评论:0

python实现批量图像二值化

python实现批量图像二值化

二值化含义:一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化Binarization)。 

常用的阈值函数有两个:全局阈值 和 自适应阈值

  • cv2.threshold(src, thresh, maxval, type) 
  • cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

1. cv2.threshold()函数 

cv2.threshold(src, thresh, maxval, type)

函数讲解 

 参数含义:

参数描述返回
src源图片,必须是单通道,即灰度图返回两个值:阈值、二值图
thresh用于对像素值进行分类的阈值,取值范围0~255
maxval填充色,如果像素值大于(有时小于)阈值则要给出的值,取值范围0~255
type阈值类型

阈值类型表:

阈值用数字表示小于阈值的像素点大于阈值的像素点
cv2.THRESH_BINARY0置0置填充色maxval
cv2.THRESH_BINARY_INV1置填充色maxval置0
cv2.THRESH_TRUNC2保持原色置灰色
cv2.THRESH_TOZERO3置0保持原色
cv2.THRESH_TOZERO_INV4保持原色

置0

函数式:

 形象化:

python代码&效果图

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('123.jpg')
GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh1=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY)
ret,thresh2=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3=cv2.threshold(GrayImage,127,255,cv2.THRESH_TRUNC)
ret,thresh4=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO)
ret,thresh5=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO_INV)
titles = ['Gray Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [GrayImage, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in xrange(6):plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')plt.title(titles[i])icks([]),icks([])
plt.show()

效果: 

 2. 单张图像二值化

代码: 

import cv2
img = cv2.imread("001.png")
print(img)
# 先进行灰度化处理,再进行二值化
Grayimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 127是二值化阈值,大于255的像素值都置为0
ret, thresh = cv2.threshold(Grayimg, 127, 255, cv2.THRESH_TOZERO_INV)
cv2.imwrite('0001.png', thresh)

效果(左图为原图,右图为二值化图) :

3. 批量图像二值化

 代码:

def binarization():    # 获取目录下所有图片名    filename = os.listdir(r"F:python_DemoDeepLearningtools3shapescmutestGT")print(filename)# os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。base_dir = r"F:python_DemoDeepLearningtools3shapesCmutestGT" # inputnew_dir  = r"F:python_DemoDeepLearningtools3shapesGT1" #outputfor img in filename:name = imgpath1= os.path.join(base_dir,img)img = cv2.imread(path1)# print(img)Grayimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(Grayimg, 250, 255,cv2.THRESH_TOZERO_INV)cv2.imwrite('img.png', thresh)image = Image.open('img.png')# 有需要可对图像进行大小调整#image = size((350, 350),Image.ANTIALIAS)path= os.path.join(new_dir,name)image.save(path)binarization()

效果:

 4. cv2.adaptiveThreshold()函数

全局阈值只需要规定一个阈值值,整个图像都和这个阈值比较。

自适应阈值可以看成一种局部性的阈值,通过规定一个区域大小,比较这个点与区域大小里面像素点的平均值(或者其他特征)的大小关系确定这个像素点是属于黑或者白(如果是二值情况)。

当同一幅图像上的不同部分的具有不同亮度时,采用自适应阈值。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。从而可以在亮度不同的情况下得到更好的结果。

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

函数讲解 

参数含义: 

参数描述返回
src源图像,灰度图返回两个值:阈值、二值图
maxValue填充色,0-255
adaptiveMethod自适应阈值方法
thresholdType阈值类型
blockSize领域大小,取奇数
C阈值计算的常数项
dst输出图,可忽略

adaptiveMethod:

自适应方法解释计算
cv2.ADPTIVE_THRESH_MEAN_C为局部邻域块的平均值。阈值取自相邻区域的平均值先求块的均值,再减去常数项C
cv2.ADPTIVE_THRESH_GAUSSIAN_C为局部邻域块的高斯加权和。阈值取值相邻区域的加权和,权重为一个高斯窗口先求块的加权和,再减去常数项C

thresholdType: 

阈值用数字表示小于阈值的像素点大于阈值的像素点
cv2.THRESH_BINARY0置0置填充色maxval
cv2.THRESH_BINARY_INV1置填充色maxval置0

python代码&效果图 

import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread('test.jpg', 0)
#中值滤波
img = dianBlur(img, 5)ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_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', 'Adaptivw 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])icks([]),icks([])
plt.show()

效果: 

参考博客

批量图片二值化python代码实现

Opencv:图像二值化 cv2.threshold()_宁静致远*的博客-CSDN博客_cv2 二值化

 OpenCV-Python: 用于图像二值化/去噪的cv2.threshold()函数详解 - 灰信网(软件开发博客聚合)

图像阈值_有cv2.threshold,cv2.adaptiveThreshold 等。 - 胸怀丶若谷 - 博客园

本文发布于:2024-02-05 05:51:29,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170725592263584.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:日本攻略
标签:批量   图像   python   二值化
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23