当前位置: 首页 > news >正文

OpenCV轻松入门_面向python(第六章 阈值处理)

阈值处理:剔除图像的像素值高于或低于一定值的像素点。

threshold函数

语法格式:
retval, dst = cv2.threshold( src, thresh, maxval, type )

  • retval 代表返回的阈值。
  • dst 代表阈值分割结果图像,与原始图像具有相同的大小和类型。
  • src 代表要进行阈值分割的图像,可以是多通道的,8 位或 32 位浮点型数值。
  • thresh 代表要设定的阈值
  • maxval 代表当 type 参数为 THRESH_BINARY 或者 THRESH_BINARY_INV 类型时,需要设定的最大值
  • type 代表阈值分割的类型

阈值分割类型

阈值分割类型可视化

二值化阈值处理(cv2.THRESH_BINARY)

二值化阈值处理会将原始图像处理为仅有两个值的二值图像;对于灰度值大于阈值thresh的像素点,将其灰度值设定为最大值;对于灰度值小于或等于阈值thresh的像素点,将其灰度值设定为 0。

用函数 cv2.threshold()对数组进行二值化阈值处理

import cv2  
import numpy as np  
img = np.random.randint(0,256,size = [4,5],dtype=np.uint8)  
t,rst = cv2.threshold(img,127,255,cv2.THRESH_BINARY)  
print("img=\n",img)  
print("t=\n",t)  
print("rst=\n",rst)

使用函数 cv2.threshold()对图像进行二值化阈值处理

import cv2  
import numpy as np  
img = cv2.imread("lena.jpg")  
t,rst = cv2.threshold(img,127,255,cv2.THRESH_BINARY)  
cv2.imshow("img",img)  
cv2.imshow("rst",rst)  
cv2.waitKey()  
cv2.destroyAllWindows()

r)

反二值化阈值处理(cv2.THRESH_BINARY_INV)

对于灰度值大于阈值的像素点,将其值设定为 0;对于灰度值小于或等于阈值的像素点,将其值设定为 255。

用函数 cv2.threshold()对图像进行反二值化阈值处理

import cv2  
import numpy as np  
img = cv2.imread("lena.jpg")  
t,rst = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)  
cv2.imshow("img",img)  
cv2.imshow("rst",rst)  
cv2.waitKey()  
cv2.destroyAllWindows()

截断阈值化处理(cv2.THRESH_TRUNC)

截断阈值化处理会将图像中大于阈值的像素点的值设定为阈值,小于或等于该阈值的像素点的值保持不变。

用函数 cv2.threshold()对图像进行截断阈值化处理。

import cv2  
import numpy as np  
img=cv2.imread("lena.jpg")  
t,rst = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)  
cv2.imshow("img",img)  
cv2.imshow("rst",rst)  
cv2.waitKey()  
cv2.destroyAllWindows()

超阈值零处理(cv2.THRESH_TOZERO_INV)

超阈值零处理会将图像中大于阈值的像素点的值处理为 0,小于或等于该阈值的像素点的值保持不变。

import cv2  
import numpy as np  
img=cv2.imread("lena.jpg")  
t,rst = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)  
cv2.imshow("img",img)  
cv2.imshow("rst",rst)  
cv2.waitKey()  
cv2.destroyAllWindows()

低阈值零处理(cv2.THRESH_TOZERO)

对于像素值大于阈值的像素点,其值将保持不变; 对于像素值小于或等于阈值的像素点,其值将被处理为 0。

用函数 cv2.threshold()对图像进行低阈值零处理。

import cv2
img = cv2.imread("lena.jpg")
t,rst = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
cv2.waitKey()
cv2.destroyAllWindows()

自适应阈值处理

在进行阈值处理时,自适应阈值处理的方式通过计算每个像素点周围临近区域的加权平均值获得阈值,并使用该阈值对当前像素点进行处理。与普通的阈值处理方法相比,自适应阈值处理能够更好地处理明暗差异较大的图像。

函数 cv2.adaptiveThreshold()来实现自适应阈值处理,该函数的语法格式为:
dst=cv.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C)

  • dst 代表自适应阈值处理结果。
  • src 代表要进行处理的原始图像。需要注意的是,该图像必须是 8 位单通道的图像。
  • maxValue 代表最大值。
  • adaptiveMethod 代表自适应方法:
    cv2.ADAPTIVE_THRESH_MEAN_C :邻域所有像素点的权重值是一致的。
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C:与邻域各个像素点到中心点的距离有关,通过高斯方程得到各个点的权重值。
  • thresholdType 代表阈值处理方式,该值必须是 cv2.THRESH_BINARYcv2.THRESH_BINARY_INV 中的一个。
  • blockSize 代表块大小。表示一个像素在计算其阈值时所使用的邻域尺寸,通常为 3、5、7 等。
  • C 是常量。
import cv2  
img = cv2.imread("computer.jpg",0)  
t1,thd = cv2.threshold(img,127,255,cv2.THRESH_BINARY)  
athdMEAN=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)  
athdGAUS=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)  
cv2.imshow("img",img)  
cv2.imshow("thd",thd)  
cv2.imshow("athdMEAN",athdMEAN)  
cv2.imshow("athdGAUS",athdGAUS)  
cv2.waitKey()  
cv2.destroyAllWindows()

Otsu处理

Otsu 方法能够根据当前图像给出最佳的类间分割阈值
即:遍历所有可能的阈值,找出最佳的阈值。
在函数 cv2.threshold()中对参数 type 的类型多传递一个参数cv2.THRESH_OTSU,可实现Otsu的阈值分割;使用 Otsu 方法时,要把阈值设为 0。此时的函数 cv2.threshold()会自动寻找最优阈值,并将该阈值返回。
t,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

测试 Otsu 阈值处理的实现。

import cv2  
import numpy as np  
img = np.zeros((5,5),dtype=np.uint8)  
img[0:6,0:6]=123  
img[2:6,2:6]=126  
print("img=\n",img)  
t1,thd=cv2.threshold(img,127,255,cv2.THRESH_BINARY)  
print("thd=\n",thd)  
t2,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)  
print("otsu=\n",otsu)

别对一幅图像进行普通的二值化阈值处理和 Otsu 阈值处理,观察处理结果的差异。

import cv2  
img = cv2.imread("tiffany.bmp",0)  
t1,thd=cv2.threshold(img,127,255,cv2.THRESH_BINARY)  
t2,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)  
cv2.imshow("thd",thd)  
cv2.imshow("otsu",otsu)  
cv2.waitKey()  
cv2.destroyAllWindows()

http://www.dtcms.com/a/494580.html

相关文章:

  • Visual Studio 2017(VS2017)可以编译 OpenCV 4.5.5 为 32 位(x86)版本
  • 使用 Wireshark 进行 HTTP、MQTT、WebSocket 抓包的详细教程
  • 一个基于BiTCN-LSTM混合神经网络的时间序列预测MATLAB程序
  • 火是用什么做的视频网站wordpress贴吧主题
  • 团购网站开发网址交易网站
  • git revert commit和undo commit的区别
  • HTTP 协议的演进之路:从 1.1 到 3.0
  • 开源CICD工具Arbess,从安装到入门零基础指南
  • Maya动画基础:自动关键帧切换、曲线图编辑器、摄影机录制动画
  • Unreal5从入门到精通之一些有用的编辑器首选项
  • 深度解析:HTTP/2 与 HTTP/3 的适用场景与技术取舍
  • 三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
  • 优化网站多少钱网站怎么做排查修复
  • 成都最好的网站推广优化公司学ui需要什么基础呢
  • 高并发系统性能测试:JMeter_Gatling 压测实战,测试场景设计与结果分析
  • 高并发体育直播平台架构实战:熊猫比分源码设计解析
  • 重庆网站建设开发wordpress哪里查看id
  • Docker下部署RocketMQ5.3.3
  • 桥田动态 | 多展位跨域协同,桥田快换盘持续赋能机器人“无界切换”
  • [AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第三篇:解决报错]
  • 我有域名怎么做网站免费开网店app
  • iOS八股文之 多线程
  • C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
  • 掌握 iOS 26 App 运行状况,多工具协作下的监控策略
  • 软考 系统架构设计师系列知识点之杂项集萃(176)
  • Apache RocketMQ在Windows下的保姆级安装教程(含可视化界面安装)
  • TypeScript类型系统:从原始到对象的实战精要
  • Git 提交消息规范:理解 fix、feature 等关键词的含义
  • PostgreSQL 表达式
  • 库早报|新华社:增材制造作为新质生产力持续突围;刘宇宁自曝是3D打印玩家;易加三维中标1166.8万元项目