Python+OpenCV图像处理(五)——图像阈值和二值化


系列文章
Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法
Python+OpenCV图像处理(二)——几何变换
Python+OpenCV图像处理(三)——彩色空间互换
Python+OpenCV图像处理(四)——图像滤波
Python+OpenCV图像处理(五)——图像阈值和二值化
Python+OpenCV图像处理(六)——边缘检测


五、图像阈值和二值化

5.1 简介

图像阈值化分割是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。

5.2 简单阈值

在这里,问题直截了当。对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值。函数cv.threshold用于应用阈值。第一个参数是源图像,它应该是灰度图像。第二个参数是阈值,用于对像素值进行分类。第三个参数是分配给超过阈值的像素值的最大值。OpenCV提供了不同类型的阈值,这由函数的第四个参数给出。通过使用cv.THRESH_BINARY类型。所有简单的阈值类型为

对于图像阈值化分割,最简单的方法是,如果像素值高于阈值(TH),将其设为最大值,如果像素值低于阈值,则将其设为最小值。举个例子,对于像素值为0~255的图像,大于TH,设为255。小于TH,设为0。这种简单的方法也被称作二值化。在OpenCV中可以使用cv2.THRESH_BINARY实现。常用的简单阈值分割的原理图如下:

  • 二值阈值化 —— 像素值大于阈值的设为最大值,小于阈值的设为最小值
  • 反向二值阈值化 —— 像素值大于阈值的设为最小值,小于阈值的设为最大值
  • 截断阈值化 —— 像素值大于阈值的设为阈值,小于阈值的保持原来的像素值
  • 超过阈值被置0 —— 像素值大于阈值的置为0,小于阈值的保持原来的像素值
  • 低于阈值被置0 —— 像素值大于阈值的保持原来的像素值,小于阈值的置为0

这几种简单阈值的方法对应OpenCV中的函数为:

  • cv2.THRESH_BINARY
  • cv2.THRESH_BINARY_INV
  • cv2.THRESH_TRUNC
  • cv2.THRESH_TOZERO
  • cv2.THRESH_TOZERO_INV

这些函数都有两个返回值,第一个返回值为使用的阈值,第二个就是阀值化之后的图像了。

实现

#%%

import cv2
import numpy as np
from matplotlib import pyplot 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
  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个使用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()函数显示二值化后的图像

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值