别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

PythonOpenCV-图像变换-阈值处理

0. 简介

   阈值处理用于剔除图像中像素值高于或低于指定值的像素点

 

1. 全局阈值处理  

  全局阈值处理是指将大于阈值的像素值设置为 255,将其他像素值设置为0;或者将大于阈值的像素值设置为 0,将其他像素值设置为 255
  OpenCV的 cv2.threshold()函数用于实现全局闯值处理,其基本格式如下:

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

  参数说明:

retval:返回的阈值

dst:阈值处理后的图像

src:原图像

thresh:设置的阈值

maxval:阈值类型为THRESH_BINARY和THRESH_BINARY_INV时使用的最大值

type:阈值类型

 

1-1. 二值化阈值处理

  cv2.threshold()函数的 type 参数值为  cv2.THRESH_BINARY 时执行二值化阈值处理,将大于阈值的像素值设置为 255,将其他像素值设置为 0。

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_ANYCOLOR)
cv.imshow('src', img_src)
retval, img_dst = cv.threshold(img_src, 79, 255, type=cv.THRESH_BINARY)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

1-2. 反二值化阈值处理

  cv2threshold()函数的 type 参数值为  cv2.THRESH_BINARY_INV 时执行反二值化阈值处理,将大于阈值的像素值设置为 0,将其他像素值设置为 255。

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_ANYCOLOR)
cv.imshow('src', img_src)
retval, img_dst = cv.threshold(img_src, 79, 255, type=cv.THRESH_BINARY_INV)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

1-3. 截断阈值处理

  cv2.threshold()函数的 type 参数值为 cv2.THRESH_TRUNC 时执行截断阈值处理,将大于阈值的像素值设置为阈值,其他像素值保持不变。

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_ANYCOLOR)
cv.imshow('src', img_src)
retval, img_dst = cv.threshold(img_src, 79, 255, type=cv.THRESH_TRUNC)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

1-4. 超阈值零处理

  cv2.threshold()函数的 type 参数值为 cv2.THRESH_TOZERO_INV 时执行超阈值零处理,将大于阈值的像素值设置为 0,其他像素值保持不变。

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_ANYCOLOR)
cv.imshow('src', img_src)
retval, img_dst = cv.threshold(img_src, 79, 255, type=cv.THRESH_TOZERO)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

1-5. 低阈值零处理

  cv2.threshold()函数的 type 参数值为 cv2.THRESH_TOZERO 时执行低阈值零处理,将小于阈值的像素值设置为 0,其他像素值保持不变。

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_ANYCOLOR)
cv.imshow('src', img_src)
retval, img_dst = cv.threshold(img_src, 79, 255, type=cv.THRESH_TOZERO_INV)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

1-6. Otsu算法阈值处理

  对于色彩不均衡的图像,Otsu 算法阈值处理方式更好,它会遍历当前图像的所有阈值,再选择最佳阈值。

  cv2.threshold()函数通过在阈值类型参数后加上 cv2.THRESH_OTSU 来实现 Otsu 算法阈值处理。

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_GRAYSCALE)
cv.imshow('src', img_src)
retval, img_dst = cv.threshold(img_src, 155, 255, type=cv.THRESH_OTSU)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

1-7. 三角形算法阈值处理

  cv2.threshold()函数通过在阈值类型参数后加上cv2.THRESH_TRIANGLE来实现三角算法阈值处理。

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_GRAYSCALE)
cv.imshow('src', img_src)
retval, img_dst = cv.threshold(img_src, 155, 255, type=cv.THRESH_TRIANGLE)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

2. 自适应阈值处理

  自适应阈值处理也称局部阈值处理,它通过计算每个像素点邻域的加权平均值来确定阈值,并用该阈值处理当前像素点。

  全局阈值处理适用于色彩均衡的图像,自适应闯值处理则适用于明暗差异较大的图像。
  OpenCv的 cv2.adaptiveThreshold()函数用于实现自适应闯值处理,其基本格式如下:

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod,  thresholdType, blockSize, C) 

  参数说明:

dst:阈值处理后的图像

src:原图像

maxValue:最大值

type:阈值类型

adaptiveMethod:自适应方法,其值为 cv2.ADAPTIVE_THRESH_MEAN_C(邻域中所有像素点的权重值相同)或者 cv2.ADAPTIVETHRESH_GAUSSIAN_C(域中像素点的权重值与其到中心点的距离有关,通过高斯方程可计算各个点的权重值)

thresholdType:阈值处理方式,其值为 cv2.THRESH_BINARY(二值化值处理)或者cv2.THRESH_BINARY_INV (反二值化值处理)

blockSize:计算局部阈值的邻域的大小

C:常量,自适应阈值为 blockSize 指定邻域的加权平均值减去 C

  代码示例:

import cv2 as cv

img_src = cv.imread('./Pictures/lena.jpg', cv.IMREAD_GRAYSCALE)
cv.imshow('src', img_src)
img_dst = cv.adaptiveThreshold(img_src, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 5, 10)
cv.imshow('dst', img_dst)
cv.waitKey(0)

  运行结果:

 

/*-------------------------------------------------------------------------------------------------------

笔者说明:

  该笔记来源于本人学习Python + OpenCv时的资料,

  分享出来只是为了供大家学习,并且为了自己以后想要用的时候方便寻找。

时间:2023年8月22日

------------------------------------------------------------------------------------------------------------*/

posted @ 2023-08-22 14:12  一路狂奔的乌龟  阅读(193)  评论(0)    收藏  举报
返回顶部