opencv初步了解

news/2024/10/19 10:30:27/

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_COLORcv2.imshow('image  窗口名称吧',img)cv2.waitKey(0)
当参数为0时,程序会无限期地等待键盘输入,直到用户按下一个键为止。这通常用于简单的图像显示任务中,例如显示一张图像然后等待用户的确认。如果没有等待用户输入,图像将会立即消失。当参数大于0时,程序会在等待指定的毫秒数之后继续运行,无论用户是否按下键盘上的任何键。例如,如果传递的参数为1000,程序将在1秒钟后继续运行。通常,当需要进行实时视频处理时,可以使用这种方式设置合适的等待时间,以平衡图像处理速度和响应速度。
cv2.destoryAllWindows()img.shape
hwc形状格式 215 530 3
转为灰度图后只有 414 500cv2.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: 每处理完一帧就等着 breakvc.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.ppmy.cn/news/123140.html

相关文章

Echarts 的 dispatchAction

一、Echarts中的action echarts中支持的图表行为,通过dispatchAction触发。 1.highlight 高亮指定的数据图形 dispatchAction({ type: highlight, // 可选,系列 index,可以是一个数组指定多个系列 seriesIndex?: number|Array…

【蓝桥杯算法题】Json内容排序

Json内容排序 题目:Python解法:Jsp解法: 题目: [{createTime: 2023-05-31 01:59:02,articleStatus: 1,articleOrder: 3,},{createTime: 2023-05-26 07:25:51,articleStatus: 1,articleOrder: null,},{createTime: 2023-05-26 07:…

MySQL 执行计划处理(Explain)

Explain ⼀条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后⽣成⼀个所谓的执⾏计划。 mysql> EXPLAIN SELECT 1; ----------------------------------------------------------------------------------------------- --------------- | id | select_type…

计算机无法屏保,Win7屏幕保护程序不能修改怎么办 win7无法设置电脑屏幕保护程序如何解决...

大家都知道当我们的电脑待机之后就会出现一个屏幕保护程序界面,可以更好的节省能耗,有些win7系统用户觉得默认的屏幕保护程序效果图标不好看,所以就想要将其修改,然而却发现屏幕保护不能修改,要怎么办呢,针…

window屏幕保护程序没有可以设置的选项

window屏幕保护程序没有可以设置的选项 winR 打开运行窗口输入regedit.exe打开注册表 找到这个目录 计算机\HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Control Panel\Desktop 删掉其他多余文件 刷新再回到设置锁屏界面

windows10 无法设置屏幕保护程序

问题详情: windows家庭版,点击“屏幕保护程序设置”,出现 C:\Windows\system32\rundll32.exe Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。无法设置屏幕保护程序。 解决办法: 系统的.dll文件可能出…

linux6禁用屏幕保护程序,禁用屏幕保护程序(ScreenSaver Disabled)

禁用屏幕保护程序ScreenSaverDisabled是一款可以帮助用户朋友让自己的电脑不要总是被屏幕保护影响,有些设置隔三差五就会进入屏保状态,使用这款禁用屏幕保护程序ScreenSaverDisabled可以帮您解决这个烦恼。 相关软件软件大小版本说明下载地址 禁用屏幕保…

屏幕保护程序命令行参数

本文介绍了标记为 4.0 或更高版本的 Win32 屏幕保护程序命令行参数。 原始产品版本: Win32 屏幕保护程序原始 KB 编号: 182383 Windows通过命令行参数与屏幕保护程序进行通信。 ScrnSave.lib 库为编写以使用它的屏幕保护程序处理此操作&#xff0c…