python+opencv图像处理之五:图像阈值化处理

python+opencv图像处理之五:图像阈值化处理

一、阈值化

阈值即为界限,或者说是临界值,是指一个效应能够产生的最低值或最高值。旨在提取图像中的目标物体,将背景以及噪声区分开来。
通常会设定一个阈值T,通过T将图像的像素划分为两类:大于T的像素群和小于T的像素群。灰度转换处理后的图像中,每个像素都只有一个灰度值,大小表示明暗程度。利用阈值化,我们就可以从一副图像中分割出我们需要的物体部分。
常见阈值化公式,即二进制阈值化:
Y = { 0 , gray<T 255 , gray>T Y= \begin{cases} 0, & \text {gray<T} \\ 255, & \text{gray>T} \end{cases} Y={0,255,gray<Tgray>T
当灰度Gray小于阈值T时,其像素设置为0,图像中显示为黑色;当灰度Gray大于或等于阈值T时,其Y值为255,图像中显示为白色。

opencv中对于图像阈值处理提供了cv2.threshold()函数
cv2.threshold()中包含四个参数,分别为:
第一个原图像
第二个进行分类的阈值
第三个是高于(低于)阈值时赋予的新值
第四个是一个方法选择参数,常用的有:

参数参数作用效果
cv2.THRESH_BINARY像素点的灰度值大于阈值,设其灰度值为最大值(255);小于阈值,设其灰度值为最小值(0)
cv2.THRESH_BINARY_INV像素点的灰度值大于阈值,设其灰度值为最小值(0);小于阈值,设其灰度值为最大值(255)
cv2.THRESH_TRUNC像素点的灰度值小于阈值,其灰度值不变;大于阈值,设其灰度值为阈值
cv2.THRESH_TOZERO像素点的灰度值小于阈值,其灰度值不变;大于阈值,设其灰度值为最小值(0)
cv2.THRESH_TOZERO_INV像素点的灰度值大于阈值,其灰度值不变;小于阈值,设其灰度值为最小值(0)

该函数有两个返回值,第一个retVal(得到的阈值数据),第二个就是阈值化后的图像。

二、各方法选择参数图像对比

程序代码如下:

#encoding:utf-8
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#输入图像
image= cv2.imread("line.jpg")

#将图片转换为灰度图
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#阈值化处理
ret,thresh1=cv2.threshold(gray,127,255,cv2.THRESH_BINARY) 
ret,thresh2=cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)  
ret,thresh3=cv2.threshold(gray,127,255,cv2.THRESH_TRUNC)  
ret,thresh4=cv2.threshold(gray,127,255,cv2.THRESH_TOZERO)  
ret,thresh5=cv2.threshold(gray,127,255,cv2.THRESH_TOZERO_INV)

#显示结果
titles = ['Gray Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']  
images = [gray, 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()

程序执行结果,各阈值处理参数显示如下:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用PythonOpenCV进行图像处理的例子: 首先,确保已经安装了PySimpleGUI、cv2和numpy库文件。可以使用以下命令通过pip安装它们: ```shell pip install pysimplegui pip install opencv-python pip install numpy ``` 然后,设计GUI界面。可以使用PySimpleGUI库来实现GUI可视。以下是一个简单的GUI设计示例: ```python import PySimpleGUI as sg # 创建GUI窗口 layout = [[sg.Image(key='image')]] window = sg.Window('Image Processing', layout, finalize=True) # 打开内置摄像头 cap = cv2.VideoCapture(0) while True: event, values = window.read(timeout=0, timeout_key='timeout') # 实时读取图像 ret, frame = cap.read() # GUI实时更新 imgbytes = cv2.imencode('.png', frame)[1].tobytes() window['image'].update(data=imgbytes) if event == sg.WINDOW_CLOSED: break window.close() ``` 这段代码创建了一个名为"Image Processing"的GUI窗口,其中包含一个用于显示图像图像框。通过打开内置摄像头,可以实时读取图像,并将其显示在GUI窗口中。当用户关闭窗口时,程序退出。 4、实时图像处理 4.1、阈值 阈值是一种常用的图像处理技术,可以将图像转换为黑白二图像。以下是一个简单的阈值示例: ```python # 读取图像 image = cv2.imread('image.jpg', 0) # 阈值 _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) # 显示结果 cv2.imshow('Binary Image', binary_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,首先使用cv2.imread()函数读取一张灰度图像。然后,使用cv2.threshold()函数将图像进行阈值处理。最后,使用cv2.imshow()函数显示二后的图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值