详解Python+OpenCV实现图像二值化

  • Post category:Python

下面就详细讲解一下“详解Python+OpenCV实现图像二值化”的完整攻略。

一、前言

首先,我想简单介绍一下本文所要讲解的内容。 OpenCV是一套开源的计算机视觉库,Python是一门高级编程语言,本文结合Python和OpenCV,将会实现图像二值化的功能。

二、环境搭建

为了实现本文所讲述的功能,我们需要安装以下软件:

  1. Python 3.x
  2. OpenCV库

安装方式大家可以自行百度搜索。

三、图像二值化

图像二值化是将图像上的像素值只分为0和1,变成一幅黑白图像,以达到提高图像对比度、降低图像处理难度等目的。

在Python中使用OpenCV实现二值化非常简单,主要使用cv2.threshold()函数即可。

(一) threshold()函数

retval, dst = cv2.threshold(src, threshold, maxval, threshold_type)

参数含义:

  • src: 输入的图像(灰度图),即要进行二值化的图像。
  • threshold: 阈值,要将大于或小于此值的像素进行二值化。
  • maxval: 在二值化时要赋予的最大值。当threshold_type为cv2.THRESH_BINARY和cv2.THRESH_BINARY_INV时有用。
  • threshold_type: 使用哪种二值化方法。

(二) 示例

下面我们将使用两个示例来说明如何使用Python和OpenCV实现图像二值化。

示例1:将一张彩色图片二值化

import cv2

# 读取图片
img = cv2.imread('example.jpg')
# 图像灰度化
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
retval, binary = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)

# 显示原图和二值化后的图片
cv2.imshow('original', img)
cv2.imshow('binary', binary)

# 等待按下任意按键退出程序
cv2.waitKey(0)
cv2.destroyAllWindows()

上述程序首先读取了一张彩色图片,并将其转换成灰度图,然后使用cv2.threshold()函数进行二值化,最后将原图和二值化后的图片显示在屏幕上。

示例2:实时调整阈值二值化

import cv2

def nothing(x):
    pass

# 创建摄像头对象
cap = cv2.VideoCapture(0)

# 创建窗口并命名
cv2.namedWindow('binary')
cv2.createTrackbar('threshold', 'binary', 0, 255, nothing)

while True:
    # 读取当前帧
    ret, frame = cap.read()
    # 将当前帧转换成灰度图
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 获取阈值滑块的位置
    threshold = cv2.getTrackbarPos('threshold', 'binary')

    # 二值化
    _, binary = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY)

    # 显示二值化后的图像
    cv2.imshow('binary', binary)

    # 如果按下q键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()

上述程序首先创建了一个窗口,并在窗口中创建了一个滑块,用于实时调整阈值。程序实现了打开摄像头并实时二值化摄像头拍摄的视频,同时可以用滑块来调整阈值,使二值化后的图像更加清晰。

四、结语

到这里,我们已经学会了如何使用Python和OpenCV实现图像二值化的功能了,相信对大家掌握OpenCV库的使用也会有所帮助。如果大家想要进一步了解详细内容,可以参考OpenCV官方文档或相关书籍。