程序代码篇---项目目录结构HSV掩膜Opencv图像处理
文章目录
- 前言
- 第一部分:项目目录结构
- 第二部分:HSV提取
- HSV
- 色调(Hue)
- 含义
- 取值范围
- 饱和度(Saturation)
- 含义
- 取值范围
- 亮度(Value)
- 含义
- 取值范围
- 第三部分:Opencv图像处理
- 1. 读取和显示图像
- 2. 转换颜色空间
- 3. 边缘检测
- 4. 形态变换
- 5. 图像阈值
- 6. 图像平滑
- 7. 图像轮廓
- 总结
前言
以上就是今天要讲的内容,本文简单介绍了项目目录结构、HSV掩膜、Opencv图像处理
第一部分:项目目录结构
一个程序项目的目录结构对于项目的组织、维护和扩展至关重要。一个清晰、合理的目录结构可以使项目更容易理解、协作和部署。以下是一个典型的程序项目目录结构,适用于多种编程语言和项目类型:
project-name/
│
├── README.md # 项目说明文件(***)
├── LICENSE # 项目许可证文件
├── .gitignore # Git 版本控制忽略规则文件
├── .editorconfig # 编辑器配置文件
├── .git # 版本控制目录(Git)
│
├── docs # 项目文档目录(***)
│ ├── development.md # 开发文档(***)
│ ├── usage.md # 使用说明(***)
│ └── ... # 其他文档
│
├── src # 源代码目录(***)
│ ├── main.py # 主程序入口(***)
│ ├── config # 配置文件和目录(***)
│ │ └── settings.py # 配置设置
│ ├── utils # 工具类和辅助函数(***)
│ │ └── helpers.py
│ ├── models # 数据模型(***)
│ │ └── user.py
│ ├── views # 视图层(MVC模式)
│ │ └── index.py
│ ├── controllers # 控制器层(MVC模式)
│ │ └── auth.py
│ └── tests # 测试代码目录(***)
│ ├── unit # 单元测试
│ └── integration # 集成测试
│
├── static # 静态文件目录,如CSS、JavaScript、图片等(***)
│ ├── css
│ ├── js
│ └── images(***)
│
├── templates # 模板文件目录(用于Web项目)
│ ├── base.html
│ └── index.html
│
├── scripts # 构建脚本或工具脚本(***)
│ ├── build.sh
│ └── deploy.sh
│
├── requirements.txt # 项目依赖列表(Python项目)(***)
├── package.json # 项目依赖和配置(Node.js项目)
├── package-lock.json # 依赖锁定文件(Node.js项目)
└── vendor # 第三方库或代码(某些语言的项目)
以下是各个目录和文件的简要说明:
- README.md: 项目的说明文档,通常包含如何安装、配置和使用项目的信息。
- LICENSE: 项目的许可证文件,说明了项目的使用、修改和分发条件。
- .gitignore: 列出了Git版本控制系统中需要忽略的文件和目录。
- .editorconfig: 提供了跨编辑器和IDE的代码风格统一配置。
- docs: 项目文档目录,用于存放开发文档、用户手册等。
- src: 源代码目录,是项目的主要开发区域。
main.py: 程序的主入口文件。
config: 配置文件和目录。
utils: 工具类和辅助函数。
models: 数据模型。
views: 视图层,通常用于Web应用中的模板渲染。
controllers: 控制器层,处理业务逻辑。
tests: 测试代码目录,通常分为单元测试和集成测试。 - static: 存放静态文件,如CSS样式表、JavaScript脚本和图片等。
- templates: 存放模板文件,通常用于Web项目中的HTML模板。
- scripts: 存放构建脚本、部署脚本或其他自动化脚本。
- requirements.txt: Python项目的依赖列表。
- package.json: Node.js项目的依赖和配置。
- package-lock.json: Node.js项目的依赖锁定文件。
- vendor: 存放第三方库或代码,这在某些编程语言的项目中很常见。
第二部分:HSV提取
在Python中,使用OpenCV库进行图像处理时,创建HSV(Hue, Saturation, Value)掩膜是一个常见的操作。通过HSV颜色空间,我们可以更轻松地分割出图像中特定颜色的区域。滑动条(Trackbar)可以用来动态调整HSV掩膜参数。
以下是一个使用OpenCV创建HSV掩膜,并通过滑动条动态调整参数的示例程序。
import cv2
import numpy as np#初始化滑动条的默认值
hue_low = 0
hue_high = 179
sat_low = 0
sat_high = 255
val_low = 0
val_high = 255#创建一个回调函数,这个函数会在滑动条被调整时被调用
def nothing(x):pass#创建一个窗口用于显示结果
cv2.namedWindow('image')#创建滑动条
cv2.createTrackbar('Hue Low', 'image', hue_low, 179, nothing)
cv2.createTrackbar('Hue High', 'image', hue_high, 179, nothing)
cv2.createTrackbar('Sat Low', 'image', sat_low, 255, nothing)
cv2.createTrackbar('Sat High', 'image', sat_high, 255, nothing)
cv2.createTrackbar('Val Low', 'image', val_low, 255, nothing)
cv2.createTrackbar('Val High', 'image', val_high, 255, nothing)#读取图像
cap = cv2.VideoCapture(0)while True:# 读取帧ret, frame = cap.read()if not ret:break# 将图像从BGR颜色空间转换到HSV颜色空间hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 获取滑动条的当前值hue_low = cv2.getTrackbarPos('Hue Low', 'image')hue_high = cv2.getTrackbarPos('Hue High', 'image')sat_low = cv2.getTrackbarPos('Sat Low', 'image')sat_high = cv2.getTrackbarPos('Sat High', 'image')val_low = cv2.getTrackbarPos('Val Low', 'image')val_high = cv2.getTrackbarPos('Val High', 'image')# 创建掩膜lower_bound = np.array([hue_low, sat_low, val_low])upper_bound = np.array([hue_high, sat_high, val_high])mask = cv2.inRange(hsv, lower_bound, upper_bound)# 将掩膜应用到原图像上result = cv2.bitwise_and(frame, frame, mask=mask)# 显示结果cv2.imshow('image', result)# 按'q'键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break#释放摄像头
cap.release()
#关闭所有OpenCV窗口
cv2.destroyAllWindows()
在这个程序中,nothing函数是一个回调函数。回调函数是当某个事件发生时,由系统自动调用的函数。在这个例子中,滑动条的值被改变时,OpenCV会自动调用nothing函数。但是,这个函数实际上并不执行任何操作,它的存在只是为了满足OpenCV创建滑动条时对回调函数的需求。
以下是程序中重要部分的解释:
- cv2.createTrackbar函数用于创建滑动条。它需要滑动条的名称、所在的窗口名称、默认值、最大值和回调函数。
- cv2.getTrackbarPos函数用于获取滑动条的当前值。
- cv2.inRange函数用于创建掩膜,它根据HSV范围过滤出特定颜色的区域。
- cv2.bitwise_and函数用于将掩膜应用到原图像上,只显示掩膜内的图像部分。
在这个程序中,我们不需要回调函数执行任何操作,因为我们通过cv2.getTrackbarPos函数在主循环中获取滑动条的值,并根据这些值更新掩膜。如果需要在滑动条值改变时执行特定的操作,可以在nothing函数中添加相应的代码。
HSV
HSV(Hue, Saturation, Value)颜色模型是一种将RGB颜色模型中的颜色分解为色调(Hue)、饱和度(Saturation)和亮度(Value)三个分量的方式。以下是HSV三个参数的含义及其取值范围:
色调(Hue)
含义
含义:色调是色彩的基本属性,它反映了颜色的种类,例如红色、绿色或蓝色。在HSV颜色模型中,色调是通过颜色轮来表示的,不同的角度代表不同的颜色。
取值范围
取值范围:通常色调的取值范围是从0到360度(在一些实现中,如OpenCV,色调的取值范围是从0到179,因为它是按照色轮的256等分来计算的)。
饱和度(Saturation)
含义
含义:饱和度表示颜色的纯度,它描述了颜色中灰度成分的多少。饱和度越高,颜色看起来越鲜艳;饱和度越低,颜色看起来越灰暗。
取值范围
取值范围:饱和度的取值范围通常是0到100%,但在OpenCV中,它的取值范围是从0到255。
亮度(Value)
含义
含义:亮度代表了颜色的明亮程度,也可以理解为颜色被照亮的程度。亮度越高,颜色越接近白色;亮度越低,颜色越接近黑色。
取值范围
取值范围:亮度的取值范围也是从0到100%,在OpenCV中,它的取值范围是从0到255。
总结一下,在OpenCV中,HSV颜色模型的取值范围如下:
色调(H):0到179
饱和度(S):0到255
亮度(V):0到255
这种表示方法使得HSV颜色模型在图像处理中特别有用,尤其是在需要分离颜色和亮度信息的情况下。例如,**通过调整色调,我们可以选择图像中的特定颜色;****通过调整饱和度,我们可以选择颜色的深浅;**通过调整亮度,我们可以选择图像中的明亮或暗淡区域。
第三部分:Opencv图像处理
在图像处理领域,OpenCV是一个广泛使用的开源库,它提供了大量的函数来处理和分析图像。以下是一些OpenCV中常见的图像处理函数及其使用流程的详细解释:
1. 读取和显示图像
import cv2#读取图像
image = cv2.imread('path_to_image.jpg')#显示图像
cv2.imshow('Image Window', image)#等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imread(): 读取图像文件。
cv2.imshow(): 在窗口中显示图像。
cv2.waitKey(): 等待按键事件,参数是毫秒数,0表示无限等待。
cv2.destroyAllWindows(): 关闭所有OpenCV创建的窗口。
2. 转换颜色空间
#将BGR图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#将BGR图像转换为HSV图像
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.cvtColor(): 将图像从一种颜色空间转换到另一种颜色空间。
3. 边缘检测
#使用Canny算法进行边缘检测
edges = cv2.Canny(image, threshold1, threshold2)
cv2.Canny(): 使用Canny算法检测图像中的边缘。
4. 形态变换
#定义一个核
kernel = np.ones((5,5), np.uint8)#腐蚀操作
erosion = cv2.erode(image, kernel, iterations=1)#膨胀操作
dilation = cv2.dilate(image, kernel, iterations=1)
cv2.erode(): 图像腐蚀,用于缩小前景对象。
cv2.dilate(): 图像膨胀,用于扩大前景对象。
5. 图像阈值
#应用简单的阈值
ret, thresh1 = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)#应用自适应阈值
thresh2 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
cv2.threshold(): 应用固定阈值到图像上。
cv2.adaptiveThreshold(): 应用自适应阈值到图像上。
6. 图像平滑
#应用高斯模糊
gaussian_blur = cv2.GaussianBlur(image, (5,5), 0)#应用中值模糊
median_blur = cv2.medianBlur(image, 5)
cv2.GaussianBlur(): 使用高斯模糊对图像进行平滑处理。
cv2.medianBlur(): 使用中值模糊对图像进行平滑处理。
7. 图像轮廓
#找到轮廓
contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)#绘制轮廓
cv2.drawContours(image, contours, -1, (0,255,0), 3)
cv2.findContours(): 在二值图像中找到轮廓。
cv2.drawContours(): 在图像上绘制轮廓。
这些函数是OpenCV图像处理的基础,通过组合使用这些函数,可以实现复杂的图像处理任务。每个函数都有其特定的参数和返回值,理解这些参数对于有效地使用OpenCV进行图像处理至关重要。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了项目目录结构、HSV掩膜、Opencv图像处理
相关文章:
程序代码篇---项目目录结构HSV掩膜Opencv图像处理
文章目录 前言第一部分:项目目录结构第二部分:HSV提取HSV色调(Hue)含义取值范围 饱和度(Saturation)含义取值范围 亮度(Value)含义取值范围 第三部分:Opencv图像处理1. 读…...

注解与反射基础
注解 概述 注解(Annotation),从jdk5.0引入。 作用 不是程序本身,可以对程序作出解释(这一点和注释没什么区别)可以被其他程序读取 格式 注释是以“注释名”在代码中存在的,还可以添加一些…...

Vue指令v-html
目录 一、Vue中的v-html指令是什么?二、v-html指令与v-text指令的区别? 一、Vue中的v-html指令是什么? v-html指令的作用是:设置元素的innerHTML,内容中有html结构会被解析为标签。 二、v-html指令与v-text指令的区别…...

院校联合以项目驱动联合培养医工计算机AI人才路径探析
一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗人工智能作为一个极具潜力的新兴领域,正深刻地改变着传统医疗模式。从疾病的早期诊断、个性化治疗方案的制定,到药物研发的加速,人工智能技术的应用极大地提升了医疗服务…...

CDDIS从2025年2月开始数据迁移
CDDIS 将从 2025 年 2 月开始将我们的网站从 cddis.nasa.gov 迁移到 earthdata.nasa.gov,并于 2025 年 6 月结束。 期间可能对GAMIT联网数据下载造成影响。...
前端 | JavaScript中的reduce方法
1. 什么是reduce reduce 方法是 JavaScript 中数组的重要方法之一,用于对数组中的元素进行累积计算。它接收一个回调函数作为参数,并返回一个最终计算结果。reduce 在许多场景下都非常有用,比如求和、数组扁平化、对象计数、数据转换等。 2…...

【C++】B2124 判断字符串是否为回文
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式:输出格式:样例: 💯方法一:我的第一种做法思路代码实现解析 💯方法二:我…...

人工智能学习(五)之机器学习逻辑回归算法
深入剖析机器学习逻辑回归算法 一、引言 在机器学习领域,逻辑回归是一种极为经典且应用广泛的算法。虽说名字里带有 “回归”,但它主要用于解决分类问题,在医学、金融、互联网等多个领域都发挥着关键作用。例如,在医学上辅助判断…...
Bash 基础与进阶实践指南
目录 Bash 简介与基础基本命令与文件操作权限管理与用户管理重定向与管道变量与环境变量通配符与正则表达式Shell 脚本结构与控制流常用内建命令与技巧文本处理常用命令作业控制与进程管理别名与函数实用技巧与注意事项更多 Bash 进阶话题参考资源 1. Bash 简介与基础 1.1 什…...

基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究
摘要:本文深入探讨在开源AI智能名片2 1链动模式S2B2C商城小程序的应用场景下,个人IP人设构建的理论与实践。通过剖析个人IP人设定义中的“诉求”“特质”“可感知”三要素,结合该小程序特点,阐述其对个人IP打造的影响与推动作用&…...

基于springboot+vue的航空散货调度系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

【C++】B2122 单词翻转
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 💯一、我的做法代码实现:代码解析思路分析 💯二、老师的第一种做法代码实现&a…...
OSCP 渗透测试:网络抓包工具的使用指南
在 OSCP 考试和渗透测试中,网络数据分析是至关重要的技能。无论是嗅探明文密码、分析恶意流量,还是溯源攻击,抓包工具都是我们的得力助手。 本文将介绍 OSI 七层网络模型 及其在网络分析中的作用,并详细讲解 Wireshark 和 tcpdum…...

Android 进程间通信
什么是IPC? Android 进程间通信(IPC,Inter-Process Communication)是Android操作系统中不同进程间交换数据和资源的一种机制。由于Android是多任务操作系统,每个应用通常运行在自己的进程中,以提高安全性和…...

Kubernetes学习之通过Service访问Pod
一、基础概述 1.当通过deployment等controller动态创建和销毁pod使得每个pod都有自己的ip地址,当controller用新的pod替代发生故障的pod时,新的pod会分配到新的ip地址,那么客户端如何稳定的找到并访问pod提供的服务。 2.创建service service从…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象
2.18 对象数组:在NumPy中存储Python对象 目录 #mermaid-svg-shERrGOBuM2rBzeB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-shERrGOBuM2rBzeB .error-icon{fill:#552222;}#mermaid-svg-shERrGOBuM2rB…...
Web - CSS3基础语法与盒模型
概述 这篇文章是关于 Web 前端 CSS3 的基础语法与盒模型的讲解。包括 CSS3 层叠性及处理冲突规则、伪元素和新增伪类元素、属性选择器等。还介绍了文本与字体属性,如段落和行相关属性、字体文本属性。最后阐述了盒子模型,如元素隐藏、行内与块元素转换、…...

CSS知识总结
CSS(层叠样式表,Cascading Style Sheets)是一种用于描述网页内容视觉表现的样式语言,与HTML(结构)和JavaScript(行为)共同构成现代Web开发的三大核心技术。 一、基本概念 定义&…...

基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token
之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级…...
信息学奥赛一本通 2113:【24CSPJ普及组】小木棍(sticks) | 洛谷 P11229 [CSP-J 2024] 小木棍
【题目链接】 ybt 2113:【24CSPJ普及组】小木棍(sticks) 洛谷 P11229 [CSP-J 2024] 小木棍 【题目考点】 1. 思维题,找规律 【解题思路】 解法1:找规律 该题为:求n根木棍组成的无前导0的所有可能的数…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...