opencv初步了解

news2024/9/21 12:02:00

https://www.bilibili.com/video/BV1PV411774y?p=2&vd_source=e7d12c9f66ab8294c87125a95510dac9

这里写目录标题

  • 下载
  • 计算机眼中的图像
  • 视频
    • gray = cv2.cvColor(frame, cv.COLOR_BGR2GRAY)
  • ROI
  • 边界填充
  • 数值计算
  • 图像融合

下载

pip install 
input cv2
cv2.__version__

下载一些额外的拓展,包含一些额外的算法
注意版本号要与上面的opencv一致
pip install opencv-contrib-python==3.4.1.15

尝试pip安装,如果装不上就去
unofficial windows python 工具包去安装,查看版本匹配依赖
cp36 python版本3.6

计算机眼中的图像

import cv2 opencv读取的格式是bgr

%matplotlib inline
 在jupyter内的特有方式 可以显示图片
 
img = cv2.imread('路径 cat.jpg', 第二个参数为彩色或是灰度 cv2.IMREAD_GRAYSCALE)
 IMREAD_COLOR

cv2.imshow('image  窗口名称吧',img)

cv2.waitKey(0)
当参数为0时,程序会无限期地等待键盘输入,直到用户按下一个键为止。这通常用于简单的图像显示任务中,例如显示一张图像然后等待用户的确认。如果没有等待用户输入,图像将会立即消失。

当参数大于0时,程序会在等待指定的毫秒数之后继续运行,无论用户是否按下键盘上的任何键。例如,如果传递的参数为1000,程序将在1秒钟后继续运行。通常,当需要进行实时视频处理时,可以使用这种方式设置合适的等待时间,以平衡图像处理速度和响应速度。
cv2.destoryAllWindows()

img.shape
hwc形状格式 215 530 3
转为灰度图后只有 414 500



cv2.imwrite('xx.png',img)
type(img)
numpy.ndarray
img.size
207000
img,dtype
dtype('unit8')


注意opencv读取图像格式,可视化操作时建议使用自带的
与matplotlib不太一样

视频

vc = cv2.VideoCapture('xxx.mp4')

检查是否打开正确
if vc.isOpened():
	open,frame = vc.read()   从视频流中一帧一帧读取,如果读取成功,open为true
else:
	open =False
while open:
ret,frame = vc.read() 有多少帧就读取多少
if frame is None:
break
if ret == True:
	gray = cv2.cvColor(frame, cv.COLOR_BGR2GRAY)
	cv2.imshow('reslut',gray)
 	if cv2.waitKey(10) & 0xFF ==27: 每处理完一帧就等着 
 		break
 vc.release()
 cv2.destroyAllwindwos() 		
这段代码常用于处理视频流,它可以实现显示视频过程中键盘响应的功能。

具体来说,cv2.waitKey()函数与cv2.imshow()函数结合使用时,可以实现不断刷新图像,即形成视频流的效果。而在这个过程中,程序会等待指定的时间,也就是cv2.waitKey()函数的参数,等待用户按下键盘上的某个键。

在这里,if cv2.waitKey(1) & 0xFF == 27: 表示如果用户按下ESC键(ASCII码值为27),则退出循环,结束程序的运行。其中,cv2.waitKey(1)函数会等待1毫秒并检查是否有键盘输入,如果没有,则返回-1,并继续执行后面的程序。如果用户按下了键盘上的某个键,则返回该键的ASCII码值,与0xFF11111111)进行位与(&)运算提取其最低8位,这样就可以保证获取到正确的ASCII码值,以便进行键盘响应的判断。		



vc.release()是OpenCV中用于释放视频文件或摄像头占用的资源的函数。它的作用是停止视频流的捕获,并释放相关的系统资源。

在调用cv2.VideoCapture()函数打开视频文件或启动摄像头进行视频流捕获时,会占用一些系统资源,如文件句柄、缓存等。在结束视频流捕获后,如果不及时释放这些资源,就会导致资源泄漏或系统不稳定等问题。

因此,在完成视频处理任务后,通常需要调用vc.release()函数来显式释放视频资源,以确保程序安全退出并避免占用过多的系统资源。


gray = cv2.cvColor(frame, cv.COLOR_BGR2GRAY)

这个函数是OpenCV中用于将彩色图像转换为灰度图像的函数。其原理是基于人眼的对比度感知机制,计算出图像三个通道(BGR)之间的加权平均值,从而减小图像的维度并去除颜色信息。常用的方法是将红、绿、蓝三个通道的像素值进行不同程度的加权求和,得到一个新的像素值作为灰度图像中的像素值。在这里,cv2.COLOR_BGR2GRAY表示将图像从BGR色彩空间转换为灰度空间。因此,使用cv2.cvColor函数可以将输入的frame图像转换成对应的灰度图像gray。

在OpenCV中,将彩色图像转换成灰度图像的过程中,通常采用下面的加权方式计算像素点的灰度值:

gray_value = 0.299 * R + 0.587 * G + 0.114 * B

其中,R、G、B分别表示像素点的红、绿、蓝三个通道的像素值。

除了采用默认的加权方式外,OpenCV还提供了其他的加权方式,如等权重(gray_value = (R + G + B)/3)、平均法(gray_value = (max(R, G, B) + min(R, G, B))/2)等。

另外,灰度图像的阈值通常根据实际需求而定,OpenCV中也提供了不同的阈值处理函数,如cv2.threshold()、cv2.adaptiveThreshold()等,可以根据具体应用场景选择不同的算法和阈值进行处理。
在OpenCV中,将彩色图像转换为灰度图像时,通常使用8位无符号整数(unsigned char)表示每个像素点的灰度值,它的取值范围是0~255。

因此,对于一幅灰度图像,它的每个像素点的灰度值都是介于0和255之间的一个整数。这些灰度值可以用来表示图像中不同区域的亮度差异和纹理信息等特征,常用于图像处理、计算机视觉、机器学习等领域。

ROI

截取部分图像数据

cat =  img[0:50,0:200] 直接截取图像
b,g,r = cv2.split(img) 颜色通道
img = cv2.merge((b,g,r))
B G R 只保留一个通道
img[:,:,0] = 0

边界填充

在这里插入图片描述
设置旁边扩充的大小
外包装法按一定固定顺序往外扩充
常数填充要给一个常数,这里给了0
在这里插入图片描述

数值计算

img1 = img +10 所有值都加上10
img[:5,:,0]
(img1 + img2)[:55,:,0] 数值超过255 会  xx%256
cv2.add(img1,img2)[] 数值越界了会取255





图像融合

img_dog = cv2.resize(img_dog,(500,414)) 前两个维度  最后一个维度3不变
img_dog = cv2.resize(img_dog,(0,0),fx=3,fy=1)  纵向变为了三分之一

权重公式+偏移
res = cv2.addWeighted(img,0.4,img2, 0.6, 0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/594179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

io之io模型

写在前面 本文一起看下常见的io模型。 1:基础知识 同步异步,阻塞阻塞,区别如下: 同步异步:描述的通信模式,即结果如果是主动的获取则是同步,处理结果是被动的接收则是异步 阻塞非阻塞:描述的…

网页提交文件无法打开问题解决办法(以学习通为例)

时长会碰到这样的情况,日常实训课在机房写实训作业时,将未完成的作业先暂存先在学习通里,但后续在登陆学习通时发现未提交的附件打不开了,经过翻阅之前web的相关资料,总结出了这样的解决办法,供各位参考。 …

时间基础概念及Linux中的时间函数

时间基础概念及Linux中的时间函数 时间相关概念GMT 时间UTC 时间时区 Time Zone夏令时 DST本地时间 localtime Linux 系统中的时间时钟基础概念系统节拍数 jiffiesLinux系统查看时间及配置时区获取时间函数获取 当前时间 time()获取 当前时间(微秒) gett…

Qt Quick系列(5)—键盘输入

🚀作者:CAccept 🎂专栏:Qt Quick 文章目录 前言代码示例单一按键组合按键 前言 本篇将介绍如何处理Qt Quick中的键盘输入。键盘输入在现代应用程序中扮演着重要角色,无论是快捷键还是文本输入都离不开它。通过本篇教…

(2021,FastGAN)用于高保真 few-shot 图像合成的更快、更稳定的 GAN 训练

Towards faster and stabilized gan training for high-fidelity few-shot image synthesis 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 跳跃层通道激励 3.2 自监督判别器 4. 实验 4.1 图像合成性能 4.2 更多分析与应用 5. 结论 参…

JL-8D/4X1 定时限电流继电器 用于输变电线路中 JOSEF约瑟

名称:定时限电流继电器型号:JL-8D/4X1触点容量250V5A功率消耗<5W返回系数0.90.97整定范围0.039.9A;0.130A辅助电源24220VDC/AC 系列型号: JL-8D/3X1定时限电流继电器;JL-8D/3X2定时限电流继电器; JL-8D/4X1定时限电流继电器&am…

【发电厂 HDLN-1-2Z 不带辅助电源电流继电器 导轨安装 JOSEF约瑟】

品牌:上海约瑟,名称:不带辅助电源电流继电器,型号:HDLN-1-2Z-2,触点容量:250V5A,整定范围:2-99.9A;特点:精度高,整定范围宽,动作快&am…

看完这篇 教你玩转渗透测试靶机vulnhub—DarkHole2

Vulnhub靶机DarkHole渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:Git信息泄露:③:SQL注入:④&#…

APP出海的现状与挑战​

随着国内移动互联网市场的饱和,越来越多的国内APP开发者和企业将目光投向了海外市场,寻求新的增长机会。根据艾瑞咨询的数据,2020年上半年,全球APP下载量达到715亿次,用户总支出达到501亿美元,其中中国出海…

Pytorch基本概念和使用方法

目录 1 Adam及优化器optimizer(Adam、SGD等)是如何选用的? 1)Momentum 2)RMSProp 3)Adam 2 Pytorch的使用以及Pytorch在以后学习工作中的应用场景。 1)Pytorch的使用 2)应用场…

vue methods 互相调用的方法

methods是一个内置的函数,主要用于两个组件之间的数据传递,也就是调用方法。下面给大家介绍一个在 vue中互相调用的方法,在使用过程中可以参考一下。 methods实现了两个组件之间数据的传递,我们先来看一下 Methods是如何实现数据传…

统计软件与数据分析Lesson17----利用pytorch构建LSTM预测股票收益率详细教程

利用pytorch构建LSTM预测股票收益率详细教程 1. 整体实现思路2.代码编写2.1 step1:导入所需的库2.2 step2: 读取数据、构建训练样本2.3 step3: 定义部分辅助函数2.4 step4:LSTM模型构建2.5 step5:模型训练2.6 step6:模型预测和评估 3. 小结 1. 整体实现思路 step1:导入所需的库…

对抗样本攻击

目录 一、对抗样本攻击的基本原理 1.1 什么是对抗样本攻击和对抗样本 1.2 对抗样本攻击的基本思路 1.3 对抗样本攻击的分类 1.3.1 按攻击效果分类 1.3.2 按攻击者能力分类 1.3.3 按攻击环境分类 1.4 对抗扰动的衡量 二、对抗样本攻击方法 一、对抗样本攻击的基本原理 …

华为OD机试真题B卷 Java 实现【最少交换次数】,附详细解题思路

一、题目描述 给出数字K&#xff0c;请输出所有小于K的整数组合到一起的最小交换次数。 组合一起是指满足条件的数字相邻&#xff0c;不要求相邻后在数组中的位置。 取值范围&#xff1a; -100 < K < 100 -100 < 数组中的数值 < 100 二、输入描述 第一行输入…

网络安全合规-ISO 27001(一)

实施ISO27001认证的步骤 在长期实践过程中&#xff0c;总结创新了一套高效可行的ISO27001/ISMS项目实施的规范流程。 一、现状调研分析&#xff1a;我方派咨询师去企业了解基本情况&#xff1b;本阶段主要是前期的准备和计划工作&#xff0c;包括明确评估目标&#xff0c;确定…

如何远程控制电脑,远程控制电脑的设置方法

很多人无论是在工作还是生活中使用电脑的时候都需要用到远程控制&#xff0c;因为它可以方便我们解决很多需要到现场操作的问题&#xff0c;在很大方面提升了我们的工作效率&#xff0c;下面来跟大家分享一下&#xff0c;如何远程控制电脑&#xff0c;远程控制电脑的设置方法 …

Web应用技术(第十五周/持续更新)

本次练习基于how2j和课本&#xff0c;进行SSM的初步整合&#xff0c;理解SSM整合的原理、好处。 SSM整合应用 1.简单的实例项目&#xff1a;2.原理分析&#xff1a;3.浅谈使用SSM框架化&#xff1a; 1.简单的实例项目&#xff1a; how2j 2.原理分析&#xff1a; 具体见流程图…

【网络】基础知识1

目录 网络发展 独立模式 网络互联 局域网LAN 广域网WAN 什么是协议 初识网络协议 协议分层 OSI七层模型 TCP/IP四层&#xff08;或五层&#xff09;模型 OSI和TCP/IP对比 网络传输流程 什么是报头 局域网通信原理 同网段的主机通讯 跨网段的主机通讯 数据包封装…

Kali搭建GVM完整版-渗透测试模拟环境(7)

上一篇:OpenVAS、GSA配置验证-渗透测试模拟环境(6)_luozhonghua2000的博客-CSDN博客 在bt5上面进行了安装,调试等配置验证,这篇在kali上面继续安装调试卸载等配置验证,中途版本问题,依赖问题,脚本编写都一一解决。 特别是因网络原因造成的rsync: [Receiver] safe_read f…

Sinkhorn-Knopp算法

Sinkhorn-Knopp是为了解决最优传输问题所提出的。 Sinkhorn算法原理 最优运输问题的目标就是以最小的成本将一个概率分布转换为另一个概率分布。即将概率分布 c 以最小的成本转换到概率分布 r&#xff0c;此时就要获得一个分配方案 P ∈ R n m 其中需满足以下条件&#xff1…