Python+OpenCV图像处理——图像二值化的实现
简介
图像二值化是图像处理的最基本也是最常用的方法之一,它将图像的灰度值转换为0或255(或1或0),从而得到一幅黑白图像。图像二值化在图像处理、计算机视觉等领域都有广泛的应用。本篇文章将介绍Python和OpenCV库如何实现图像二值化。
步骤
1.导入必要的库
import cv2
import numpy as np
2.读取图像
img = cv2.imread("image.png")
3.将图像转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
4.使用cv2.threshold()函数进行图像二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
其中,gray参数是待二值化的图像,127是阈值,255是二值化的最大值,cv2.THRESH_BINARY表示采用二值化方式进行处理。
5.显示图像
cv2.imshow("Binary Image", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
完整代码示例:
import cv2
import numpy as np
# 读取图像
img = cv2.imread("image.png")
# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 显示图像
cv2.imshow("Binary Image", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例1:手写数字二值化
import cv2
import numpy as np
# 读取图像
img = cv2.imread("digits.png")
# 将图像转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 分割图像
cells = [np.hsplit(row, 100) for row in np.vsplit(gray, 50)]
# 将列表转为numpy数组
x = np.array(cells)
# 分割出一个数字
digit = x[0, 0]
# 显示原始图像和分割出的数字
cv2.imshow('Original Image', img)
cv2.imshow('Digit', digit)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 二值化
ret, binary = cv2.threshold(digit, 127, 255, cv2.THRESH_BINARY)
# 显示二值化后的图像
cv2.imshow("Binary Image", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上述示例中,我们读取了一个包含50*100个手写数字的图像,并进行了分割。接着,我们选择其中一个数字,并对其进行二值化处理,最终显示了二值化后的图像。
示例2:图像平滑处理
import cv2
import numpy as np
# 读取图像
img = cv2.imread("image.png")
# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 图像平滑处理
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 二值化处理
ret, binary = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY)
# 显示原始图像和平滑后的图像、二值化后的图像
cv2.imshow("Original Image", img)
cv2.imshow("Smoothing Image", blur)
cv2.imshow("Binary Image", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个示例中,我们首先将一张图像转为灰度图,然后采用高斯滤波(GaussianBlur)平滑处理,接着再对其进行二值化处理。最终展示了原始图像、平滑后的图像和二值化后的图像。
以上就是Python+OpenCV图像处理——图像二值化的实现的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+OpenCV图像处理——图像二值化的实现 - Python技术站