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

python学opencv|读取图像(三十三)阈值处理图像-限定像素

【1】引言

前序我们已经掌握分解图像的通道,设置各个通道的RGB值,相关文章包括且不限于:

python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分-CSDN博客

python学opencv|读取图像(十五)BGR图像和HSV图像通道合并_bgr hsv-CSDN博客

也学会了对于较为简单的灰度图像进行像素操作:

python学opencv|读取图像(六)读取图像像素RGB值_python 获取图片像素点颜色-CSDN博客

python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客

python学opencv|读取图像(十)用numpy创建彩色图像_python numpy图像-CSDN博客

有时候,如果我们想粗犷一些处理像素,也就是把图像的像素约束在某一些范围内,也就是做阈值限定,这时候就要在先前的学习基础上,应用一个新的函数:cv2.threshold()。

【2】官网教程

点击下方连链接,直达官网教程:

OpenCV: Miscellaneous Image Transformations

在这里,将会看到对 cv2.threshold()函数的说明:

2877c7b426fc42808b445490aed09fca.png

图1

这里的参数意义为:

double cv::threshold     (     InputArray     src,  #输入图像
        OutputArray     dst,                                  #输出图像
        double     thresh,                                     #阈值下限-阈值开关
        double     maxval,                                   #阈值上限
        int     type )                                             #阈值处理类型,暂不是重点,无需关注

需要说明的是,一旦达到阈值下限,图像的RGB值会直接等于阈值上限;而未达到阈值下限时,图像的RGB值会直接等于0。

所以,这个阈值下限,本身孩子一个阈值开关,大于它的都取上限,小于它的都是0.

【3】代码测试

【3.1】代码

为了测试这个阈值的效果,我们做一下代码测试。

首先引入图像:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
src = cv.imread('scasrcf.png',0)
dst=src#输出图像

这里直接把输入图像转化为灰度图像了。

然后是调用cv2.threshold()函数,尝试不同的阈值类型:

t1,dst1=cv.threshold(src,58,158,cv.THRESH_BINARY) #阈值开关58,阈值上限158
t2,dst2=cv.threshold(src,100,255,cv.THRESH_BINARY) #阈值开关100,阈值上限255
t3,dst3=cv.threshold(src,0,255,cv.THRESH_BINARY) #阈值开关0,阈值上限255

 之后就是对这些阈值函数进行效果输出和保存:

#展示图像
cv.imshow('srcf', dst)  # 在屏幕展示效果
cv.imshow('srcft1', dst1)  # 在屏幕展示效果
cv.imshow('srcft2', dst2)  # 在屏幕展示效果
cv.imshow('srcft3', dst3)  # 在屏幕展示效果#保存图像
cv.imwrite('srcf-m.png', dst)  # 保存图像
cv.imwrite('srcf-m-t1.png', dst1)  # 保存图像
cv.imwrite('srcf-m-t2.png', dst2)  # 保存图像
cv.imwrite('srcf-m-t3.png', dst3)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

【3.2】效果

为了分辨清楚图像效果,首先我们看原图:

e21a4f0fc353499ea7c5dfeff6c4f46b.png

图2 原图

读取图像后转化的灰度图为:

230a8e1be3db4cbc9d4914573957910a.png

图3 灰度图

然后是阈值开关58,阈值上限158的转换效果:

9e556d0b49134dcfafe52816576e65fd.png

图4  阈值开关58,阈值上限158

然后是阈值开关100,阈值上限255的转换效果:

a7abe9b3320d4eb28e27fed18919dd3e.png

图5 阈值开关100,阈值上限255

然后是阈值开关0,阈值上限255:

5234f84fa2e940e7b733b5017993d62b.png

图6 阈值开关0,阈值上限255

实际上,图6不是纯白色图片,因为还有一些RGB=0的位置,所以图6中有一些零零散散的黑色线条。

【4】细节说明

调用cv2.threshold()函数时,应该按照下述形式:

t1,dst1=cv.threshold(src,58,158,cv.THRESH_BINARY)

这里的t1不可少,可以暂时理解为:为了把各个未知的RGB值转换为0或者阈值上限,t1是一个中间过渡值。

【5】总结

掌握了python+opencv获得阈值处理图像,也就是限定像素图像的技巧。

 

http://www.lryc.cn/news/520357.html

相关文章:

  • QT Quick QML 实例之椭圆投影,旋转
  • 炸砖块游戏的最终图案
  • LLM的实验平台有哪些:快速搭建测试大语言模型
  • python3GUI--大屏可视化-XX产业大数据指挥舱(附下载地址) By:PyQt5
  • .NET 9.0 的 Blazor Web App 项目中 Hash 变换(MD5、Pbkdf2) 使用备忘
  • uniapp 抖音小程序 getUserProfile:fail must be invoked by user tap gesture
  • (undone) MIT6.S081 2023 学习笔记 (Day5: LAB4 traps)
  • 前端笔记----
  • 学习华为熵减,激发组织活力
  • 9Hive数据倾斜
  • 【大数据】机器学习 -----关于data.csv数据集分析案例
  • 深入解析 C++ 类型转换
  • C++ union 联合(八股总结)
  • 聊聊AI Agent
  • scala代码打包配置(maven)
  • 慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
  • C++使用minio-cpp库在minio中创建bucket
  • 【大模型】大语言模型的数据准备:构建高质量训练数据的关键指南
  • 【解决】okhttp的java.lang.IllegalStateException: closed错误
  • TCP-IP详解卷 TCP的超时与重传
  • Linux服务器查看【可用端口号连接】的命令和方式【netstat,ss,lsof】
  • 【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
  • Attention计算中的各个矩阵的维度都是如何一步步变化的?
  • 【数模学习笔记】插值算法和拟合算法
  • 探索 C++ 与 LibUSB:开启 USB 设备交互的奇幻之旅
  • 二、模型训练与优化(4):模型优化-实操
  • 3D可视化产品定制,应用于哪些行业领域?
  • Avalonia 入门笔记(零):概述
  • Unity TextMesh Pro入门
  • [论文阅读] (35)TIFS24 MEGR-APT:基于攻击表示学习的高效内存APT猎杀系统