Opencv图像处理
Opencv图像处理
图像阈值处理
图像阈值的处理通过cv2.threshold函数来进行处理,该函数的具体说明如下所示
ret, dst = cv2.threshold(src, thresh, maxval, type)
-
src: 输入图,只能输入单通道图像,通常来说为灰度图
-
dst: 输出图
-
thresh: 阈值
-
maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
-
type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
cv2.THRESH_BINARY_INV THRESH_BINARY的反转
cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
- 读取图像信息并将其转化为灰度图
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline
def showimg(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()
img_dog = cv2.imread('./res/dog.jpg')
# 转化为灰度图
img_gray = cv2.cvtColor(img_dog,cv2.COLOR_BGR2GRAY)
img_gray.shape
showimg("dog",img_gray)
- 测试图像阈值的处理,并在行内绘制经过图像阈值处理之后的图像信息(彩色图像进行处理)
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img_dog, thresh1, thresh2, thresh3, thresh4, thresh5]
# 绘制出所需的图像信息
for i in range(6):plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()
图像平滑处理
首先引出图像平滑处理的概念 -> 读入(给出)一张含有多个图像噪音的图片。对图像进行平滑处理可以简单的理解为使用滤波去除图像中噪音的过程
- 读入并展示含有噪音的经典图像数据
img_n = cv2.imread('./res/lenaNoise.png')
showimg('noise',img_n)
滤波可以类比与卷积操作,对图像中的像素值进行处理
使用均值滤波对图像进行处理。
cv2.blur(img, (3, 3))
- img输入图像
- (3,3)(5,5)处理的区域大小
# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img_n, (3, 3))cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
从而可以看出明显的平滑处理的样式
# 方框滤波
# 基本和均值一样,可以选择归一化(True进行平均 False )
box = cv2.boxFilter(img_n,-1,(3,3), normalize=False) cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()
其他使用较多的方式包括了均值滤波和高斯滤波等一些常规的方法
# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
aussian = cv2.GaussianBlur(img_n, (5, 5), 1) cv2.imshow('aussian', aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
#%%
# 中值滤波
# 相当于用中值代替
median = cv2.medianBlur(img_n, 5) # 中值滤波cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()
所有的平滑处理结果进行展示
# 展示所有的
res = np.hstack((blur,aussian,median))
#print (res)
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像形态学操作
图像的形态学操作大多处理的是黑白背景的图片
图像的腐蚀操作 :(即设置迭代的次数和操作的大小)对白色的边缘区域来进行进一步的处理。
dige = cv2.imread('./res/dige.png')cv2.imshow('img', dige)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.erode(dige,kernel,iterations = 2)
- 图像
- 操作大小
- 迭代次数
kernel = np.ones((3,3),np.uint8)
erosion = cv2.erode(dige,kernel,iterations = 2)cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()
腐蚀操作的一个逆操作可以看作是一个膨胀操作。(使得白色的区域变大)
在执行腐蚀完成之后白色的小区域虽然去掉了,但是线条的大小变小,因此需要使用膨胀操作
cv2.dilate(erosion,kernel,iterations = 1)
- erosion经过腐蚀操作之后的图像。
kernel = np.ones((3,3),np.uint8)
dige_dilate = cv2.dilate(erosion,kernel,iterations = 1)cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()
完成膨胀操作进行扩充线条的粗细。
开运算与闭运算
开运算(cv2.MORPH_OPEN):先腐蚀,再膨胀 闭运算(cv2.MORPH_CLOSE):先膨胀,再腐蚀
本质就是一个综合进行处理的过程信息。cv2.morphologyEx()
# 开:先腐蚀,再膨胀
img = cv2.imread('dige.png')kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 闭:先膨胀,再腐蚀
img = cv2.imread('dige.png')kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
梯度运算
梯度(cv2.MORPH_GRADIENT)=膨胀-腐蚀:简单理解是梯度运算是用来筛选图片的边界区域的。
- 水平连接经过膨胀和腐蚀的两个区域。
res = np.hstack((dilate,erosion))
# 梯度=膨胀-腐蚀
pie = cv2.imread('./res/pie.png')
kernel = np.ones((7,7),np.uint8)
dilate = cv2.dilate(pie,kernel,iterations = 5)
erosion = cv2.erode(pie,kernel,iterations = 5)res = np.hstack((dilate,erosion))cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 执行梯度运算来进行筛选。
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关文章:
Opencv图像处理
Opencv图像处理 图像阈值处理 图像阈值的处理通过cv2.threshold函数来进行处理,该函数的具体说明如下所示 ret, dst cv2.threshold(src, thresh, maxval, type) src: 输入图,只能输入单通道图像,通常来说为灰度图 dst&#x…...
LeetCode | 2879.显示前三行
在 pandas 中,可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行,可以在 head() 方法中传入一个参数 n,读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…...
Qt实现简易播放器
效果如图 源码地址: 简易播放器: 基于Qt的简易播放器,底层采用VLC源码 - Gitee.com GitHub:GitHub - a-mo-xi-wei/easy-player: 基于Qt的调用VLC的API的简易播放器...
适配Android12启动页
今天我们讲个什么话题呢?我们今天讲的内容是,Android12新启动页的支持API。 启动页我想大家都不陌生吧,通常的写法就是先创建一个SplashActivity,在onCreate中 Handler(Looper.getMainLooper()).postDelayed({// 在这里跳转主界…...
人工智能在医学领域的应用及技术实现
欢迎来到 Papicatch的博客 目录 🍉引言 🍉 医学影像分析 🍈技术实现 🍍数据准备 🍍模型构建 🍍模型训练 🍍模型评估 🍍应用部署 🍈示例代码 🍉 基因…...
MySQL—多表查询—练习(1)
一、引言 上几篇关于多表查询的基本几个部分全部学习完了。 多表查询的基本类型的查询包括以下: 1、内连接(隐式内连接、显示内连接):... [INNER] JOIN ... ON 条件; ) 2、外连接(左外连接、右外连接&…...
千益畅行:合法合规的旅游卡服务,打破误解
近期,千益畅行旅游卡服务引起了公众的广泛关注。然而,一些人对该服务存在误解,认为其存在某种欺诈行为。但经过深入了解和全网搜索证据,我们可以确认,千益畅行实际上是一家合法合规的旅游卡服务提供商。 千益畅行旅游…...
【Echarts系列】水平柱状图
【Echarts系列】水平柱状图 序示例数据格式代码 序 为了节省后续开发学习成本,这个系列将记录我工作所用到的一些echarts图表。 示例 水平柱状图如图所示: 数据格式 data [{name: 于洪区,value: 2736},{name: 新民市,value: 2844},{name: 皇姑区,…...
怎样把便签里的内容移到桌面?桌面便签软件使用方法
每次打开电脑,我总是被满屏的文件和图标弄得眼花缭乱。那些记录在各式各样便签里的重要事项,经常被埋没在这信息的海洋中,找起来真是头疼。想必很多人都有过这样的困扰:如何在繁杂的桌面环境中,一眼就看到自己需要提醒…...
量化入门:qmt获取可转债基本信息和行情数据
💻专业版获取可转债数据 今天将展示如何使用Python和QMT来获取可转债的实时数据和财务数据。 🔬 获取可转债基本信息 迅投的券商版和基础版都不支持可转债行情,投研专业版才支持,一年大概5000元。免费的券商版可参考QMT量化入门 投研专业版才有权限调用download_cb_d…...
AVL树 ---(C++)
本篇讲全面的讲解 AVL 树的插入,旋转以及验证 AVL 树的性能(本篇未实现删除代码)。至于为什么会有 AVL 树,这是因为简单的二叉搜索树并不能直接的保证搜索的效率,因为当我们在二叉搜索树中插入一段有序的序列的时候&am…...
基于spring boot+MySQL 小区物业管理系统-计算机毕设 附源码37236
spring boot 小区物业管理系统 摘 要 在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,小区物业只能以客户为导向,以产品的持续创新作为小区物…...
Linux/Ubuntu/Debian常用服务管理命令
Linux/Ubuntu/Debian常用服务管理命令 在 Linux 系统中,服务管理是系统管理员日常维护工作的重要组成部分。通过一些常用的命令,我们可以查看服务状态、启动或停止服务、重启服务等。掌握这些命令,可以让系统管理工作更加高效和便捷。 1. s…...
Maven的三种项目打包方式——pom,jar,war的区别
1、pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom。 聚合工程只是用来帮助其他模块构建的工具,本身并没有实质的内容。具体每个工程代码的编写还是在生成的工程中去写。 对于在父工程…...
[手游] 三色绘恋S Mobile Link
语音合成TTS: 文字转成语音的工具 WPS免登录一键修改器: 去除烦人的登录且能正常使用 故事简介: 深秋的雨季即将到来,正值那个为人所熟知的故事发生的前一年—— 地点:湖北省的重点高中,武汉师贰高校。 新学年开始,各…...
nss刷题(4)
1、[SWPUCTF 2021 新生赛]easyrce <?php error_reporting(0); highlight_file(__FILE__); if(isset($_GET[url])) { eval($_GET[url]); } ?> if(isset($_GET[url])) isset函数用来检测url变量是否存在;$_GET函数获取变量数据 eval($_GET[url]); eval函数用…...
iOS调整collectionViewCell顺序
效果图 原理 就是设置collectionView调整顺序的代理方法,这里要注意一点 调整过代理方法之后,一定要修改数据源,否则导致错乱。 还有就是在collectionView上面添加一个长按手势,在长按手势的不同阶段,调用collectionV…...
【回调函数】
1.回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数 时,被调用的函数就是回调函数。回调函数不是由该函数的实现方…...
找树左下角的值-力扣
本题个人认为不能叫做 找树左下角的值,左下角再怎么说也应当在树的左子树上,本题要求的节点是树最底层最左边的值。 首先想到的解法是对二叉树进行层序遍历,并记录本层第一个节点的值,当层序遍历结束时,此时记录的值即…...
【AI应用探讨】— Gemma2模型应用场景
目录 1. 金融风险管理 2. 营销策略优化 3. 医疗保健领域 4. 供应链管理 5. 人力资源管理 6. 自然语言处理(NLP) 7. 图像识别 8. 音频信号处理 9. 总结 1. 金融风险管理 场景描述:Gemma 2模型在金融领域可用于预测金融市场的波动性和…...
树二叉树
树 树是 n(n≥0)个结点的有限集。当 n 0时,称为空树。在任意一颗非空树中应满足: (1)有且仅有一个特定的称为根的结点。 (2)当 n > 1时,其余结点可分为 m&…...
无源晶振振荡电路失效问题分析与解决策略
无源晶振(晶体谐振器)在电子设备中扮演着至关重要的角色,为数字电路提供稳定的时钟信号。然而,振荡电路一旦失效,可能会导致整个系统运行不正常。晶发电子将从三个主要方面分析无源晶振振荡电路失效的问题,…...
LIMS系统在汽车第三方检测实验室的应用
随着汽车行业的快速发展,汽车第三方检测实验室的工作量不断增加,对实验室的管理效率和数据准确性提出了更高的要求。LIMS系统的引入可以实现实验室的全面数字化管理,提高工作效率,降低运营成本,并提升数据质量与决策支…...
positivessl泛域名https证书
PositiveSSL,作为Sectigo旗下的子品牌,一直以来颁发的https数字证书产品性价比较高,适合大多数个人网站和中小型企业。其中,DV基础型的泛域名https证书以申请简单、颁发速度快、价格低受到众多用户的欢迎。今天就随SSl盾小编了解P…...
MySQL bin-log日志恢复数据
目录 一、开启二进制日志 二、检查二进制日志是否开启 三、使用二进制日志备份和恢复 使用二进制日志备份恢复前先创建备份: 应用二进制日志: 扩展用法: 四、常见命令和操作 五. 使用 mysqlbinlog 工具查看二进制日志 1. 查看二进制…...
Linux网络命令——netstat
netstat是Linux系统中非常有用的网络工具,被称为是网络监控中的军工刀,足见其地位。 传统上,它用于问题确定而不是性能测量,但是也可用于查看网络上的流量,以确定性能问题是否由于网络阻塞引起。 netstat用于显示与I…...
手机怎么压缩图片?通过三种压缩操作
手机怎么压缩图片?在智能手机日益普及的今天,拍照分享已成为日常生活的一部分。然而,高质量的照片往往占用较大的存储空间,且在网络上传输时速度较慢。那么,如何在手机上压缩图片呢?本文将介绍三种实用的手…...
分布式CAP、BASE理论务必了解一下
分布式系统理论是计算机科学中的一个重要分支,它关注如何设计和实现能够跨多个物理或逻辑位置运行的系统。在分布式系统中,CAP定理和BASE理论是两个非常著名的理论,它们分别描述了分布式系统设计中的一些基本约束和原则。 CAP定理 CAP定理&…...
spring最常用的注解
核心注解 Component 描述:将类标记为 Spring 组件,以便自动检测。用途:通常用于标注服务类或其他支持类。 Controller 描述:将类标记为 Spring MVC 控制器。用途:用于处理 Web 请求。 Service 描述:将类标记…...
Docker:认识镜像仓库及其命令
文章目录 Docker Registry什么是Docker Registry 镜像仓库工作机制使用流程实际使用方法仓库的拉取机制 常用的镜像仓库---DockerHub什么是DockerHub私有仓库 镜像仓库命令docker logindocker pulldocker pushdocker searchdocker logout Docker Registry 什么是Docker Regist…...
多产品网站怎么做企业网站/河南企业网站建设
通过王涛完成的项目练习,发现了struts中的表单校验失败后重显的一个问题:假设ActionForm Bean中有一个整数类型的属性,如果将其类型定义为int,这个属性的默认值是0;在表单页面中用一个文本框来输入这个属性的值&#x…...
海南建设局相关网站/百度宣传推广
简介LinuxApacheMySQL/MariaDBPHP(简称LAMP),是一组常用来搭建动态网站或者服务器的开源软件。部署及环境:系统平台:CentOS 7.2Apache版本:2.4.23Mysql 版本:5.7.17PhP版本:7.0.12安装前准备:Ce…...
行业网站开发管理软件/如何进行网站推广?网站推广的基本手段有哪些
100佳精美的个性名片设计些列第四篇。名片,中国古代称名刺,是标示姓名及其所属组织、公司单位和联系方法的纸片。名片是新朋友互相认识、自我介绍的最快有效的方法。交换名片是商业交往的第一个标准官式动作。一起欣赏这些精美的个性名片。 61. REACTOR …...
wordpress注册防骚挠/网站定制设计
什么是容器 容器是指容纳其他物品的工具,物体可以被放置在容器内,容器可以保护其中内容物; Linux容器发展之路 容器技术的概念最初出现在 2000 年,当时称为 FreeBSD jail,这种技术可将 FreeBSD 系统分区为多个子系统&a…...
阜阳商城网站建设/seo外链友情链接
准备环境:VS.2003, windows2003(IIS6.0)SP1因为偶然的原因,需要调试几个asp页面,但手动上只有UltraEdit和VS.net.知道InterDev可以调试,可以装起来以后,总是出错。我本身对其也不熟悉,也没时间摸索…...
做动态网站必学/广告推广网站
💥 项目专栏:【Pandas数据处理100例目录】Python数据分析玩转Excel表格数据 前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目…...