OpenCV图像认知(二)
形态学变换:
核:
核(kernel)其实就是一个小区域,通常为3*3、5*5、7*7大小,有着其自己的结构,比如矩形结构、椭圆结构、十字形结构,如下图所示。通过不同的结构可以对不同特征的图像进行形态学操作的处理。
腐蚀:
腐蚀操作就是使用核在原图(二值化图)上进行从左到右、从上到下的滑动(也就是从图像的左上角开始,滑动到图像的右下角)。在滑动过程中,令核值为1的区域与被核覆盖的对应区域进行相乘,得到其最小值,该最小值就是卷积核覆盖区域的中心像素点的新像素值,接着继续滑动。由于操作图像为二值图,所以不是黑就是白,这就意味着,在被核值为1覆盖的区域内,只要有黑色(像素值为0),那么该区域的中心像素点必定为黑色(0)。这样做的结果就是会将二值化图像中的白色部分尽可能的压缩,如下图所示,该图经过腐蚀之后,“变瘦”了。
代码:
import cv2
import numpy as npimage = cv2.imread(图片路径)
k = np.ones((3,3),np.uint8)#设置核值
#iterations:表示腐蚀次数
e_img = cv2.erode(image, k, iterations=2)#进行腐蚀操作
cv2.imshow('image',image)
cv2.imshow('e_img',e_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用:
去除噪声:腐蚀可以消除小的噪声点。
分离物体:能够分离接触的物体。
缩小目标:使目标区域变小,边界向内收缩。
膨胀:
膨胀与腐蚀刚好相反,膨胀操作就是使用核在原图(二值化图)上进行从左到右、从上到下的滑动(也就是从图像的左上角开始,滑动到图像的右下角),在滑动过程中,令核值为1的区域与被核覆盖的对应区域进行相乘,得到其最大值,该最大值就是核覆盖区域的中心像素点的新像素值,接着继续滑动。由于操作图像为二值图,所以不是黑就是白,这就意味着,在卷积核覆盖的区域内,只要有白色(像素值为255),那么该区域的中心像素点必定为白色(255)。这样做的结果就是会将二值化图像中的白色部分尽可能的扩张,如下图所示,该图经过膨胀之后,“变胖”了。
代码:
import cv2
import numpy as npimage = cv2.imread(图片路径)
k = np.ones((5,5),np.uint8)#设置核值
#iterations:进行膨胀操作的次数
d_img = cv2.dilate(image, k, iterations=2)#进行膨胀操作
cv2.imshow('d_img',d_img)
cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用:
填补空洞:膨胀可以填补目标区域中的小孔或断裂。
扩展边界:使目标区域的边界向外扩展。
连接物体:能够连接接近但不接触的物体。
开运算:
图像开运算是图像依次经过腐蚀、膨胀处理后的过程。
代码:
import cv2
import numpy as npimage = cv2.imread('图片路径')
k = np.ones((7,7),np.uint8)
#开运算:先腐蚀 后膨胀
k_img = cv2.morphologyEx(image, cv2.MORPH_OPEN, k)
cv2.imshow('image',image)
cv2.imshow('k_img',k_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用:
分离物体,消除小区域
消除噪点,去除小的干扰块,而不影响原来的图像
闭运算:
闭运算与开运算相反,是先膨胀后腐蚀。
代码:
import cv2
import numpy as npimage = cv2.imread('图片路径')
k = np.ones((7,7),np.uint8)
#闭运算:先膨胀 后腐蚀
b_img = cv2.morphologyEx(image, cv2.MORPH_CLOSE, k)
cv2.imshow('image',image)
cv2.imshow('b_img',b_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用:
消除/“闭合”物体里面的孔洞
可以填充闭合区域
礼帽运算:
原图像与“开运算“的结果图之差。
代码:
import cv2
import numpy as np# 读取图像
img = cv2.imread("图片路径")
# 定义结构元素
kernel = np.ones((7, 7), np.uint8)
# 执行腐蚀操作
eroded = cv2.morphologyEx(img, cv2.MORPH_TOPHAT,kernel)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用:
分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用礼帽运算进行背景提取
黑帽运算:
”闭运算“的结果图与原图像之差。
代码:
import cv2
import numpy as np# 读取图像
img = cv2.imread("图片路径")
# 定义结构元素
kernel = np.ones((7, 7), np.uint8)
# 执行黑帽操作
eroded = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT,kernel)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用:
分离比邻近点暗一些的斑块。
形态学梯度:
形态学梯度是一个基于结构元素的图像处理方法,它通过比较原图像与膨胀图和腐蚀图之间的差异来突出图像边缘特征。具体来说,对于图像中的每个像素点,其形态学梯度值是该像素点在膨胀后的图像值与其在腐蚀后的图像值之差。这样得到的结果通常能够强化图像的边缘信息,并且对噪声有一定的抑制作用。
代码:
import cv2
import numpy as npimage = cv2.imread('图片路径')
k = np.ones((9,9), np.uint8)
t_img = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, k)
cv2.imshow('image', image)
cv2.imshow('t_img', t_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图片颜色识别:
RGB颜色空间:
RGB颜色空间是最常用的一种颜色表示方法,它基于人类视觉系统的三色理论,通过红(Red)、绿(Green)、蓝(Blue)三种基本颜色的不同组合来表示各种颜色。这三种颜色可以通过不同强度的光的组合来创建其他颜色。
RGB颜色空间可以产生大约1600万种颜色,几乎包括了世界上的所有颜色,也就是说可以使用RGB颜色空间来生成任意一种颜色。
注意:在OpenCV中,颜色是以BGR的方式进行存储的,而不是RGB,这也是上面红色的像素值是(0,0,255)而不是(255,0,0)的原因。
颜色加法:
两个图像具有相同的大小和类型,可以使用OpenCV的add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res = img1 + img2。
OpenCV加法和Numpy加法之间存在差异。
OpenCV的加法是饱和操作:
x = np.uint8([250])
y = np.uint8([10])
print( cv.add(x,y) ) # 250+10 = 260 => 255
Numpy添加是模运算:
x = np.uint8([250])
y = np.uint8([10])
print( x+y ) # 250+10 = 260 % 256 = 4
颜色加权加法:
颜色加法的一种,按照两幅图比重的不同,给人一种混合和透明的感觉。
混合加法公式:
dst:输出图像,α,β分别为img1和img2的权重(大小0-1之间),γ为添加到每个和的标量值(亮度调节)
代码:
import cv2image1 = cv2.imread('../src/pig.png')
image2 = cv2.imread('../src/cao.png')
image3 = cv2.addWeighted(image1,0.7, image2,0.3,0)
cv2.imshow('image1',image1)
cv2.imshow('image2',image2)
cv2.imshow('img',image3)
cv2.waitKey(0)
cv2.destroyAllWindows()
HSV颜色空间:
HSV颜色空间指的是HSV颜色模型,这是一种与RGB颜色模型并列的颜色空间表示法。HSV颜色空间使用色调(Hue)、饱和度(Saturation)和亮度(Value)三个参数来表示颜色,色调H表示颜色的种类,如红色、绿色、蓝色等;饱和度表示颜色的纯度或强度,如红色越纯,饱和度就越高;亮度表示颜色的明暗程度,如黑色比白色亮度低。
为什么有了RGB颜色空间我们还是需要转换成HSV颜色空间来进行图像处理呢?
RGB颜色空间虽然直接对应设备的颜色显示方式,但在实际图像处理中我们常转换为HSV空间,主要因为HSV更符合人类对颜色(色调、饱和度、明度)的直观感知,使颜色调整更直观高效。HSV将颜色信息集中在H和S通道,与亮度(V通道)分离,不仅对光照变化更具鲁棒性,还能简化计算处理(如颜色检测只需处理两个维度)。相比RGB需要同时调整三个通道的复杂操作,HSV允许单独调整颜色属性(如只改变色调或饱和度),在颜色分割、特征提取等任务中表现更优,因此成为计算机视觉中颜色处理的首选空间。
在进行图片颜色识别时,我们会将RGB图像转换到HSV颜色空间,然后根据颜色区间来识别目标颜色。
制作掩膜:
掩膜(Mask)是一种在图像处理中常见的操作,它用于选择性地遮挡图像的某些部分,以实现特定任务的目标。
掩膜通常是一个二值化图像,并且与原图像的大小相同,其中目标区域被设置为1(或白色),而其他区域被设置为0(或黑色),并且目标区域则可以根据HSV的颜色范围进行修改。
代码:
import cv2
import numpy as npimage = cv2.imread('car.png')
#转换成HSV图像
hsv_img = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
#定义取色区间(比如蓝色)
low = np.array([100,100,100])
up = np.array([140,255,255])
#inRange函数创建掩膜
img = cv2.inRange(hsv_img,low,up)
cv2.imshow('img',img)
cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
将原图像转换为hsv图像,然后定义一个选色区间制作掩膜。
相关文章:

OpenCV图像认知(二)
形态学变换: 核: 核(kernel)其实就是一个小区域,通常为3*3、5*5、7*7大小,有着其自己的结构,比如矩形结构、椭圆结构、十字形结构,如下图所示。通过不同的结构可以对不同特征的图像…...
大数据与数据分析【数据分析全栈攻略:爬虫+处理+可视化+报告】
- 第 100 篇 - Date: 2025 - 05 - 25 Author: 郑龙浩/仟墨 大数据与数据分析 文章目录 大数据与数据分析一 大数据是什么?1 定义2 大数据的来源3 大数据4个方面的典型特征(4V)4 大数据的应用领域5 数据分析工具6 数据是五种生产要素之一 二 …...

t015-预报名管理系统设计与实现 【含源码!!!】
项目演示地址 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装预报名管理系统软件来发挥其高效地信息处理的…...

LLM中的Loss与Logits详解
LLM中的Loss与Logits详解 自己构建的logits的损失函数,比自带loss效果好很多,建议自己构建; 另外学习率也是十分重要的参数,多次尝试,通过查看loss的下降趋势进行调整; 举例,来回跳跃说明下降率过大,一般从0.0001 开始尝试。 在深度学习中,logits 和 loss 是两个不…...
数学术语之源——绝对值(absolute value)(复数模?)
目录 1. 绝对值:(absolute value): 2. 复数尺度(复尺度):(modulus): 1. 绝对值:(absolute value): 一个实数的绝对值是其不考虑(irrespective)符号的大小(magnitude)。在拉丁语中具有相同意思的单词是“modulus”,这个单词还…...

亚马逊商品评论爬取与情感分析:Python+BeautifulSoup实战(含防封策略)
一、数据爬取模块(Python示例) import requests from bs4 import BeautifulSoup import pandas as pd import timeheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36,Accept-Language: en-US }def scrape_amazon_re…...
STM32的DMA入门指南:让单片机学会“自动搬运“数据
STM32的DMA入门指南:让单片机学会"自动搬运"数据 引言:CPU的烦恼 想象你是一个快递分拣员,每天要手动把成千上万的包裹从卡车搬到仓库。这时候如果有个自动传送带能帮你完成搬运工作,你就可以专心处理更重要的订单核对…...
从虚拟化到云原生与Serverless
操作系统课程:从虚拟化到云原生与Serverless 大家好,我是你们的操作系统课程老师!今天我们将从虚拟化技术讲到现代的云原生和Serverless架构,带你看看计算机系统如何从早期的虚拟机(VM)演进到容器…...

OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局
【AI安全警钟再响,这次主角竟是OpenAI?】 当全球AI圈还在为Claude 4的“乖巧”欢呼时,OpenAI最新模型o3却以一场惊心动魄的“叛逃”测试引爆舆论——在100次关机指令测试中,o3竟7次突破安全防护,甚至篡改底层代码阻止系…...

Bootstrap:精通级教程(VIP10万字版)
一、网格系统:实现复杂响应式布局 I. 引言 在现代 Web 开发领域,构建具有视觉吸引力、功能完善且能在多种设备和屏幕尺寸上无缝运行的响应式布局至关重要。Bootstrap 作为业界领先的前端框架,其核心的网格系统为开发者提供了强大而灵活的工具集,用以高效创建复杂的响应式…...

技术创新如何赋能音视频直播行业?
在全球音视频直播行业的快速发展中,技术的持续创新始终是推动行业进步的核心动力。作为大牛直播SDK的开发者,我很荣幸能分享我们公司如何从产品的维度出发,精准把握市场需求,并不断推动产品的发展,以满足不断变化的行业…...

leetcode1201. 丑数 III -medium
1 题目:1201. 丑数 III. 官方标定难度:中 丑数是可以被 a 或 b 或 c 整除的 正整数 。 给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。 示例 1: 输入:n 3, a 2, b 3, c 5 输出…...

ai工具集:AI材料星ppt生成,让你的演示更出彩
在当今快节奏的工作环境中,制作一份专业、美观的 PPT 是展示工作成果、传递信息的重要方式。与此同时,制作PPT简直各行各业的“职场噩梦”,很多人常常熬夜到凌晨3点才能完成,累到怀疑人生。 现在?完全不一样了&#x…...
@Prometheus 监控操作系统-Exporter(Win Linux)
文章目录 Prometheus 监控操作系统(Win&Linux)-Exporter1. 概述2. Linux 系统监控 (Node Exporter)2.1 下载 Node Exporter2.2 创建 Systemd 服务2.3 启动服务2.4 验证安装 3. Windows 系统监控 (Windows Exporter)3.1 下载 Windows Exporter3.2 安装选项3.3 验证安装3.4 防…...

LINUX530 rsync定时同步 环境配置
rsync定时代码同步 环境配置 关闭防火墙 selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUXdisable设置主机名 hostnamectl set-hostname code hostnamectl set-hostname backup设置静态地址 cd /etc/sysconfi…...

CMG 机器人格斗大赛举行,宇树人形机器人参赛,比赛有哪些看点?对行业意味着什么?
点击上方关注 “终端研发部” 设为“星标”,和你一起掌握更多数据库知识 其实那个遥控员挺爽的。打拳皇等都是用手柄控制虚拟人物在对打,他们这是控制真的。 格斗最考验的不是攻击力,而是"挨打后能不能快速爬起来"。G1在比赛中展示…...
Python——MySQL远程控制
目录 MySQL运程控制 1. 准备工作 2. 连接MySQL数据库 使用mysql-connector 使用PyMySQL 3. 基本CRUD操作 创建表 插入数据 查询数据 更新数据 删除数据 4. 高级操作 事务处理 使用ORM框架 - SQLAlchemy 5. 最佳实践 6. 常见错误处理 连接池 一、连接池的作用…...
异常:UnsupportedOperationException: null
异常信息 Not Implemented java.lang.UnsupportedOperationException: null at java.base/java.util.AbstractList.add(AbstractList.java:153) at java.base/java.util.AbstractList.add(AbstractList.java:111) at java.base/java.util.AbstractCollection.addAll(AbstractCo…...
Ubuntu 24.04 LTS 和 ROS 2 Jazzy 环境中使用 Livox MID360 雷达
本文介绍如何在 Ubuntu 24.04 LTS 和 ROS 2 Jazzy 环境中安装和配置 Livox MID360 激光雷达,包括 Livox-SDK2 和 livox_ros_driver2 的安装,以及在 RViz2 中可视化点云数据的过程。同时,我们也补充说明了如何正确配置 IP 地址以确保雷达与主机…...

自动化立体仓库堆垛机SRM控制系统FC19手动控制功能块开发
1、控制系统手动控制模块HMI屏幕设计如下图 屏幕分为几个区域:状态显示区、控制输入区、导航指示区、报警信息区。状态显示区需要实时反馈堆垛机的位置、速度、载货状态等关键参数。控制输入区要有方向控制按钮,比如前后左右移动,升降控制,可能还需要速度调节的滑块或选择按…...

Ollama(1)知识点配置篇
ollama已经成功安装成功后,通常大家会对模型的下载位置和访问权限进行配置 1.模型下载位置修改 都是修改系统环境变量。 (1)默认下载位置 macOS: ~/.ollama/modelsLinux: /usr/share/ollama/.ollama/modelsWindows: C:\Users\你的电脑用户…...

VMware Workstation虚拟系统设置双网口
一.设置windows11系统VMware Network Adapter VMnet1。 1.进入到网络和Internet -> 高级网络设置 2.找到VMware Network Adapter VMnet1,进入到“更多配置选项”并“编辑”。 3.进入到属性,双击“Interenet协议版本4(TCP/IPv4ÿ…...
Qt基础终结篇:从文件操作到多线程异步UI,深度解析核心要点
文章目录 前言一、QFileDialog 文件对话框二、QFileInfo 文件信息类三、QFile 文件读写类四、UI与耗时操作:避免UI卡顿与程序未响应五、多线程六、异步刷新与线程通信总结 前言 上一篇文章,我们已经把qt的基础知识讲解的差不多了。本文我们将继续进行qt…...
ubuntu中,文本编辑器nano和vim区别,vim的用法
目录 一.区别1.介绍2.适用场景3. 配置与个性化1) nano:2)Vim: 二.Vim1、Vim 的安装与启动2、Vim 的三种模式 (普通模式、插入模式、命令行模式)3、Vim 的常用操作4、Vim 的配置5、Vim 的高级功能 三.nano使…...

山洪灾害声光电监测预警解决方案
一、方案背景 我国是一个多山的国家,山丘区面积约占国土面积的三分之二。每年汛期,受暴雨等因素影响,极易引发山洪和泥石流。山洪、泥石流地质灾害具有突发性、流速快、流量大、物质容量大和破坏力强等特点,一旦发生,将…...

【Rust模式与匹配】Rust模式与匹配深入探索与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
React从基础入门到高级实战:React 高级主题 - React Concurrent 特性:深入探索与实践指南
React Concurrent 特性:深入探索与实践指南 引言 随着Web应用对用户体验的要求日益提高,React在2025年的技术环境中引入了并发渲染(Concurrent Rendering)这一革命性特性,旨在提升应用的响应速度和交互流畅度。并发渲…...

electron安装报错处理
electron安装报错 解决方法: 修改 C:\Users\用户名.npmrc下配置文件 添加代码 electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/最后代码 registryhtt…...

NHANES指标推荐:CQI
文章题目:The impact of carbohydrate quality index on menopausal symptoms and quality of life in postmenopausal women 中文标题:碳水化合物质量指数对绝经后妇女更年期症状和生活质量的影响 发表杂志:BMC Womens Health 影响因子&…...
【OpenHarmony】【交叉编译】使用gn在Linux编译3568a上运行的可执行程序
linux下编译arm64可执行程序 一.gn ninja安装二.交叉编译工具链安装1.arm交叉编译工具2.安装arm64编译器 三. gn文件添加arm及arm64工具链四.编译验证 本文以gn nijia安装中demo为例,将其编译为在arm64(rk_3568_a开发板)环境下可运行的程序 一.gn ninja安装 安装g…...