vincentcheng

图像阈值处理是实现图像分割的一种方法,常用的阈值分割方法有简单阈值,自适应阈值,Otsu\'s二值化等。

cv2.threshold()可以用来进行图像阈值处理,cv2.threshold(src, thresh, maxval, type) 第一个参数是原图像,第二个参数是对像素值进行分类的阈值,第三个参数是当像素值高于(小于)阈值时,应该被赋予的新的像素值,第四个参数是阈值方法。函数有两个返回值,一个为retVal, 一个阈值化处理之后的图像。

常用的阈值方法有:

全局阈值:

 

自适应阈值

当同一幅图像不同部分具有不同的亮度时,全局阈值并不适用,此时我们会采用自适应阈值,自适应阈值会在图像上每一个小区域计算与其对应的阈值。可以使用cv2.adaptiveThreshold()要传入三个参数:阈值计算方法,邻域大小,常数C, 阈值等于平均值或者加权平均值减去这个常数。

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread(\'/home/vincent/Pictures/work/uy_gnix_iac.jpg\')

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.threshold(img, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)

images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]


for i in range(6):
	plt.subplot(2,3, i+1)
	plt.imshow(images[i])
plt.suptitle(\'fixed threshold\')

img = cv2.imread(\'/home/vincent/Pictures/work/barbara.png\', 0)

print(img.shape)

thresh6 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

thresh7 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

ret, thresh8 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)

images2 = [img, thresh6, thresh7, thresh8]


plt.figure(2)
for i in range(4):
	plt.subplot(1,4,i+1)
	plt.imshow(images2[i],\'gray\')
plt.suptitle(\'adaptive threshold\')

plt.show()

 

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-01-01
  • 2022-01-01
  • 2021-10-29
  • 2021-04-10
  • 2021-06-21
  • 2021-08-02
猜你喜欢
  • 2021-07-10
  • 2021-10-21
  • 2021-10-06
  • 2021-07-12
  • 2021-10-07
  • 2021-11-13
相关资源
相似解决方案