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

OpenCV 1

 前言:开新坑辽,,


目录

计算机眼中的图像

视频的读取与处理

ROI区域

边界填充

数值计算

腐蚀操作 

膨胀操作

开运算与闭运算

梯度计算

礼貌与黑帽

Sobel算子 梯度计算方法

scharr与laplacian


计算机眼中的图像

灰色图片,只有一个颜色通道

彩色图片,有三个颜色通道,并且都以矩阵的形式展示出来


%matplotlib inline :notebook特有,方便展示图片,少写代码

cv2.imread : 读取图像


 cv2.imshow:展示图像

'image':给图像命名

cv2.waitKey(0):

“0”,指按键盘任意键都可以取消图片的展示。

“1000”or“10000”等等,指当图片展示时间到1000or10000时,图片会自动消失

cv2.destroyAllWindows():结束代码

视频的读取与处理

h(高):414

w(宽):500

c(通道数):3 说明是彩色图


若想读取图像为灰度图像,则

其中,


 保存代码:


问题1 :

if vc.isOpened():

open, frame = vc.read()

else: open = False,

这里的open和frame指的是什么?

  • open 是一个布尔变量,用来标记视频文件是否成功打开。
    • 如果 vc.isOpened() 返回 True,说明视频文件已被成功打开,此时 vc.read() 会返回两个值:第一个是一个布尔值 True 或 False 表示是否有正确读取到帧,第二个值是实际读取到的图像帧。
    • 如果 vc.isOpened() 返回 False,说明视频文件没有被成功打开,此时直接设置 open 为 False,而不调用 vc.read() 方法。
  • frame 是一个 NumPy 数组,代表从视频流中读取的一帧图像数据。如果成功读取了一帧,它将包含图像数据;如果没有成功读取或已经到了视频结尾,它的值将是 None

问题2:while open:

ret, frame = vc.read()

if frame is None:

break

这里的ret,frame指的是什么?

  • open 是一个布尔变量,用来控制循环的进行。
  • ret 是一个布尔值,表示是否成功读取到了一帧图像。如果 vc.read() 成功读取了一帧图像,它将返回 True;否则返回 False
  • frame 同上,是一个包含读取到的图像数据的 NumPy 数组,如果读取失败或达到视频末尾,其值为 None

问题3:ESC键是哪个键 

  • ESC 键通常位于键盘的左上角,全称为“Escape”,通常用来中断或退出当前操作。在很多程序中,按下 ESC 键可以关闭窗口或退出应用。ASCII码为27。

 问题4:waitKey(?)

?:若为数字100,则展示速度较缓快

?:若为数字1000,则展示速度较缓


ROI区域

cat =img[0:50,0:200]

 0:50,0:200:分别代表宽和长


r.shape:长宽是多少 


cv2.merge:

在OpenCV中,cv2.merge()函数是用来合并多个单通道图像(例如BGR)成一个三通道彩色图像。在这个例子中,(b,g,r)表示三个单通道图像数组,它们会被合并成一个新的三通道图像。

img.shape输出的是新合并后的图像的维度信息,包括高度、宽度和通道数。在这个例子中,结果为(414, 500, 3),表明合并后的图像有414行、500列以及3个颜色通道(即RGB)。

所以,cv2.merge()的主要作用就是将多个单通道图像组合成一个完整的彩色图像。


BGR:分别的索引为0,1,2

因此,不要什么通道就将通道设置为0

比如:只保留R通道,即不需要BG通道,即将BG通道设置为0,即将索引编号为0,1设置为0

:,:,:表示所有,即整个图片的长度和宽度都要包含


边界填充

 

cv2.BORDER_WRAP的方法下,cde|abcde|abc为什么这样循环?

 cv2.BORDER_WRAP: 用另一边的像素进行填充

假设我们有一个字符串 "abcde" 作为图像的一部分。在cv2.BORDER_WRAP模式下,边界像素会“环绕”,即当超出边界时,会从相反的一侧取像素

考虑以下几种情况:

  1. 原始字符串"abcde"
  2. 向左扩展一个像素:在这种情况下,我们需要取左边的像素。由于我们已经处于字符串的起始位置,我们需要从字符串的末尾取一个像素。因此,我们得到 "e|abcde"
  3. 向右扩展一个像素:在这种情况下,我们需要取右边的像素。由于我们已经处于字符串的末尾位置,我们需要从字符串的起始位置取一个像素。因此,我们得到 "abcde|a"

现在,让我们看看您提供的字符串 "cde|abcde|abc" 是否可以解释为某种特定的扩展方式:

  • 左边的扩展"cde"。这看起来是从原始字符串 "abcde" 的第三个字符开始,一直到字符串末尾。
  • 中间的原始字符串"abcde"
  • 右边的扩展"abc"。这看起来是从原始字符串的起始位置开始,一直到倒数第二个字符。

数值计算

 +10:矩阵里面的每一个值都加10


对于第一种相加的方式,要取模%256,即,若数值超过256,则取模

对于第二种相加的方式,若超过255,则计为255,若小于255,则就是那个数字


 若要融合两张图片,必须使得两张图片的尺寸一致,也就是size一致,利用resize进行调整

 第二种改变图片大小的方法,是放大or缩小多少倍数。(0,0)说明不指定具体数字


addWeighted(图片1,图片1的权重,图片2,图片2的权重,提亮多少) 

R = ax1 + bx2 + b


腐蚀操作 

 iterations 为1,2,3 有以上不同的效果


膨胀操作

 

 iterations 为1,2,3 有以上不同的效果 


开运算与闭运算


梯度计算

得到边缘信息


礼貌与黑帽

 

礼帽:结果是不带刺的图案

黑帽:结果不带刺,只剩下一点字的轮廓了


Sobel算子 梯度计算方法

获得图案的轮廓

 

上减下,右减左

用上cv2.CV_64F以及convertScaleAbs的用处就是,即便是负数也可以。

scharr与laplacian

scharr能捕抓到更加细腻的细节

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue Router 编程式导航全攻略:深入掌握 push, replace, go, back, forward,beforeEach 方法
  • 术语“in law”(在分布上)
  • Gitee丝滑版本:成功在新电脑添加新文件
  • stm32 PWR电源控制(修改主频睡眠模式停机模式待机模式)
  • 无限边界:现代整合安全如何保护云
  • Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
  • RTMP协议在无人机巡检中的应用场景
  • Haproxy搭建Web集群
  • 一个基于Java SSM框架(Spring、SpringMVC、MyBatis)的沙县小吃点餐系统
  • 【网站架构部署与优化】web服务与http协议
  • RockTrack:A 3D Robust Multi-Camera-Ken Multi-Object Tracking Framework
  • Oracle事物
  • 计算机人工智能前沿进展-大语言模型方向-2024-09-18
  • Hexo框架学习——从安装到配置
  • HTB-Blue(永恒之蓝漏洞复现)
  • 网络传输文件的问题
  • Apache的80端口被占用以及访问时报错403
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • jquery cookie
  • KMP算法及优化
  • MySQL用户中的%到底包不包括localhost?
  • passportjs 源码分析
  • php的插入排序,通过双层for循环
  • python大佬养成计划----difflib模块
  • React16时代,该用什么姿势写 React ?
  • Spring Boot快速入门(一):Hello Spring Boot
  • SpringBoot 实战 (三) | 配置文件详解
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 解决iview多表头动态更改列元素发生的错误
  • 离散点最小(凸)包围边界查找
  • 前言-如何学习区块链
  • 通信类
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Redis 入门到精通(七)-- redis 删除策略
  • ## 基础知识
  • #define、const、typedef的差别
  • #laravel 通过手动安装依赖PHPExcel#
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (02)Unity使用在线AI大模型(调用Python)
  • (26)4.7 字符函数和字符串函数
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • .gitignore文件使用
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET Micro Framework初体验
  • .Net MVC4 上传大文件,并保存表单
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net和php怎么连接,php和apache之间如何连接
  • .net生成的类,跨工程调用显示注释