• 阈值化函数
  • 我的理解为,在计算机图像视觉中,我们常见的RGB图像表现的信息过多,可能会存在于一些掺杂的噪声(因为针对视觉目标不是我们需要的),因此使用阈值算法,直接效果就是可以降噪,特征更加的明显化。
  • 一般使用灰度图,需要使用单通道的图片才可以进行阈值化,针对RGB或者HSV格式的图片,我们需要进行灰度化操作才可以进行阈值算法的使用。
import cv2 as cv

img = cv.imread("./images/1.jpg")

gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)

cv.imshow("gray",gray)

cv.imshow("binary",binary)
cv.waitKey(0)
  • 阈值化的方式有很多,有针对像素对半分的,也有针对大于阈值进行操作或者小于阈值进行操作的。
  • 自适应阈值化
  • 自适应均值化
  • 自适应高斯均值化
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread("./images/2.jpg",cv.IMREAD_GRAYSCALE)
img = cv.GaussianBlur(img,(5,5),sigmaX=0)

ret,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)

# blockSize为邻域块的大小、C为偏移值
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,blockSize=9,C=2)

th3 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,blockSize=9,C=2)

titles = ["Original Image",
"Global Thresholding(V=127)",
"Adaptive Mean Thresholding",
"Adaptive 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])
plt.xticks([])
plt.yticks([])
plt.show()

OpenCV(python)从入门到精通——threshold阈值算法_深度学习