OpenCV-Python——环境配置及图像基本操作

news2024/10/7 5:50:42

请添加图片描述
一、环境配置

1、在虚拟环境中安装以下库:

opencv-python==3.4.1.15

opencv-contrib-python==3.4.1.15

建议安装3.4.1的版本,3.4.2之后的版本做了专利保护,有的功能不能实现。

虚拟环境的安装以及安装库的问题见PyQt5专栏中的第一节。

2、安装jupyter notebook

pip install jupyter——安装

jupyter notebook——启动

二、图像的基本操作

1、图像的操作

  • cv2.IMREAD_COLOR:彩色图像
  • cv2.IMREAD_GRAYSCALE:灰度图像
 1 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*读取图片\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*开始
 2 \# 导入库
 3 import cv2
 4 import numpy as np 5 # import matplotlib.pyplot as plt 6 
 7 \# 读入图片
 8 # img = cv2.imread('cat.jpg')
 9 img = cv2.imread('cat.jpg',cv2.IMREAD\_GRAYSCALE) # 读入灰度图像
10 
11 \# 显示图片
12 # cv2.imshow('image',img)
13 # cv2.waitKey(10000)                          # 显示10秒
14 \# cv2.destroyAllWindows()
15 
16 \# 定义展示图片函数
17 def cv\_show(name,img):
18 cv2.imshow(name,img)
19     cv2.waitKey(0)
20 cv2.destroyAllWindows()
21 
22 cv\_show('image',img)                          # 调用函数cv\_show
23 
24 \# 打印一些参数
25 print(img)                                    # 打印图片
26 print(img.shape)                              # 打印图像的尺寸
27 print(type(img))                              # 打印的图像的格式
28 print(np.size(img))                           # 打印图片的大小
29 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*读取图片\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*结束

2、视频的操作

  • cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
  • 如果是视频文件,直接指定好路径即可
 1 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*读取视频\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*开始
 2 \# 导入库
 3 import cv2
 4 import numpy as np 5 # import matplotlib.pyplot as plt 6 
 7 vc = cv2.VideoCapture('test.mp4')               # 读取视频
 8 
 9 \# 检查是否打开正确
10 if vc.isOpened():
11     open, frame = vc.read()
12 else:
13     open = False
14 
15 while open:
16     ret, frame = vc.read()
17     if frame is None:
18         break
19     if ret == True:
20         gray = cv2.cvtColor(frame,  cv2.COLOR\_BGR2GRAY)
21         cv2.imshow('result', gray)
22         if cv2.waitKey(10) & 0xFF == 27: # 每一帧的等待时间以及关闭
23             break
24 vc.release()
25 cv2.destroyAllWindows()
26 
27 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*读取视频\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*结束

3、截取部分图像+颜色通道获取

 1 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*截取部分图像+颜色通道获取\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*开始
 2 \# 导入库
 3 import cv2
 4 # import numpy as np 5 # import matplotlib.pyplot as plt 6 
 7 img=cv2.imread('cat.jpg')
 8 cat=img\[0:200,0:200\]                         # 截取部分图像数据
 9 
10 \# 定义展示图片函数
11 def cv\_show(name,img):
12 cv2.imshow(name,img)
13     cv2.waitKey(0)
14 cv2.destroyAllWindows()
15 
16 # cv\_show('cat',cat)
17 
18 b,g,r=cv2.split(img)                        # 获取图像的r,b,g通道数值
19 print(b)
20 print(b.shape)
21 
22 img=cv2.merge((b,g,r))                      # r,g,b通道合成
23 print(img.shape)
24 
25 \# 只保留R
26 cur\_img = img.copy()
27 cur\_img\[:,:,0\] = 0                          # 除R通道其余都设置为0
28 cur\_img\[:,:,1\] = 0
29 cv\_show('R',cur\_img)                        # 只保留R通道
30 
31 \# 只保留G
32 cur\_img = img.copy()
33 cur\_img\[:,:,0\] = 0
34 cur\_img\[:,:,2\] = 0
35 cv\_show('G',cur\_img)                        # 只保留G通道
36 
37 \# 只保留B
38 cur\_img = img.copy()
39 cur\_img\[:,:,1\] = 0
40 cur\_img\[:,:,2\] = 0
41 cv\_show('B',cur\_img)                        # 只保留B通道
42 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*截取部分图像+颜色通道获取\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*结束

4、边界填充

  • BORDER_REPLICATE:复制法,也就是复制最边缘像素。
  • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
  • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
  • BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
  • BORDER_CONSTANT:常量法,常数值填充。
 1 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*边界填充\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*开始
 2 import cv2 3 import matplotlib.pyplot as plt 4 
 5 img = cv2.imread('cat.jpg')
 6 
 7 # 设置参数
 8 top\_size,bottom\_size,left\_size,right\_size = (50,50,50,50)
 9 
10 
11 replicate = cv2.copyMakeBorder(img, top\_size, bottom\_size, left\_size, right\_size, borderType=cv2.BORDER\_REPLICATE)
12 reflect = cv2.copyMakeBorder(img, top\_size, bottom\_size, left\_size, right\_size,cv2.BORDER\_REFLECT)
13 reflect101 = cv2.copyMakeBorder(img, top\_size, bottom\_size, left\_size, right\_size, cv2.BORDER\_REFLECT\_101)
14 wrap = cv2.copyMakeBorder(img, top\_size, bottom\_size, left\_size, right\_size, cv2.BORDER\_WRAP)
15 constant = cv2.copyMakeBorder(img, top\_size, bottom\_size, left\_size, right\_size,cv2.BORDER\_CONSTANT, value=0)
16 
17 plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
18 plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
19 plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
20 plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT\_101')
21 plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
22 plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
23 
24 plt.show()
25 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*边界填充\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*结束

5、数值计算

 1 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*数值计算\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*开始
 2 import cv2 3 
 4 img\_cat=cv2.imread('cat.jpg')
 5 
 6 print(img\_cat\[:5,:,0\])                # 原图   打印前五行
 7 
 8 img\_cat2 = img\_cat+10
 9 print(img\_cat2\[:5,:,0\])               # 处理后 打印前五行
10 
11 # 直接相加==%256  求余数
12 print((img\_cat+img\_cat2)\[:5,:,0\])     # 相加后 打印前五行
13 
14 # add函数
15 print(cv2.add(img\_cat,img\_cat2)\[:5,:,0\])     # add后 打印前五行
16 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*数值计算\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*结束

6、图像融合

R = aX1 + aX2 + b

 1 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*图像融合\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*开始
 2 import cv2 3 
 4 img\_cat=cv2.imread('cat.jpg')
 5 img\_dog=cv2.imread('dog.jpg')
 6 
 7 # 查看当前图像的各自参数
 8 print(img\_cat.shape)
 9 print(img\_dog.shape)
10 
11 # 修改图像的大小  保持一致
12 img\_dog = cv2.resize(img\_dog,(500,414))
13 print(img\_dog.shape)
14 
15 # 加权融合
16 res = cv2.addWeighted(img\_cat, 0.4, img\_dog, 0.6, 0)
17 print(res.shape)
18 
19 # 显示图像
20 # 定义展示图片函数
21 def cv\_show(name,img):
22 cv2.imshow(name,img)
23 cv2.waitKey(0)
24 cv2.destroyAllWindows()
25 
26 cv\_show('image',res)
27 
28 # 比例修改图像大小
29 img\_cat = cv2.resize(img\_cat,(0,0),fx=3,fy=1)
30 cv\_show('cat\_image',img\_cat)
31 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*图像融合\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*结束

7、图像灰度转换

  cv2.COLOR\_BGR2GRAY
1 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*图像的灰度转换\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*开始
2 import cv2                                            # opencv读取的格式是BGR
3 # import numpy as np
4 # import matplotlib.pyplot as plt                     # Matplotlib是RGB
5 
6 img=cv2.imread('cat.jpg')
7 img\_gray = cv2.cvtColor(img,cv2.COLOR\_BGR2GRAY)       # 灰度转换
8 print(img\_gray.shape)
9 # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*图像的灰度转换\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*结束

本文仅供练习,切勿商用

由于文章篇幅有限,文档资料内容较多,需要这些文档的朋友,可以加小助手微信免费获取,【保证100%免费】,中国人不骗中国人。
请添加图片描述
今天分享就到这里啦,感谢大家支持。

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

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

相关文章

Pytest+Allure+Yaml+Jenkins+Gitlab接口自动化中Jenkins配置

一、背景 Jenkins(本地宿主机搭建) 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码(可不改,如果运行报allure找不到就直接注释掉) …

使用命令行创建uniapp+TS项目,使用vscode编辑器

一:如果没有pnpm,先安装pnpm 二:使用npx工具和degit工具从 GitHub 上的 dcloudio/uni-preset-vue 仓库克隆一个名为 vite-ts 的分支,到项目中. 执行完上面命令后,去manifest.json添加appid(自己微信小程序的Id),也可不执行直接下一步,执行pnpm install ,再执行pnpm:dev:mp-weix…

BW:CP里添加信息对象小问题记录

之前做视图直接添加进CP里,以为不能直接往CP里加信息对象,还专门建了一个带信息对象的模型,把信息对象拖到CP里,然后再链接视图的字段 今天发现原来不用这样,直接加就可以,小记一下 如图直接诶创建&#x…

虚拟化 之八 详解构造带有 jailhouse 的 openEuler 发行版(ARM 飞腾派)

基本环境 嵌入式平台下,由于资源的限制,通常不具备通用性的 Linux 发行版,各大主流厂商都会提供自己的 Linux 发行版。这个发行版通常是基于某个 Linux 发行版构建系统来构建的,而不是全部手动构建,目前主流的 Linux 发行版构建系统是 Linux 基金会开发的 Yocto 构建系统。…

Revit插件|建模助手「综合模块」30+个功能全面免费

噢~我的伙计们,快来猜猜是谁快满三岁了?没错,咱们的得力干将——Revit插件「建模助手」!这三年里,【综合】模块就像那个超受欢迎的小兄弟,帮了大家大忙。说起来都激动,到今年5月底,它…

高考填报志愿的纠结,钱途重要还是兴趣爱好重要?

不管考得好不好,都会纠结怎么填报学校怎么填报专业,毕竟这与未来息息相关,这决定了未来的就业方向。为了好好规划未来,很多人会在此时犹豫不决,不知道到底是结合就业前景来安排好,还是根据个人的喜好来安排…

告别质量烦恼,精益生产培训帮你打造品质传奇!

在企业运营的复杂环境中,我们常常会观察到一种现象:尽管团队全力以赴,但效率和效果却难以达到预期。这时,精益生产(Lean Production)的理念和方法就显得尤为重要。 精益生产简介 精益生产并非只适用于大…

探索网络爬虫技术:原理、实践与挑战

一、引言 在数字化时代,信息如同潮水般汹涌而来。过去,我们可能依赖书籍、报纸或电视来获取信息,但这些渠道的信息量有限,而且筛选过的信息未必能满足我们的需求。如今,互联网为我们提供了海量的信息,但同…

Linux网络-网络层IP协议、数据链路层以太网协议、ARP协议、ICMP协议和NAT技术

文章目录 前言一、IP协议IP报头解析4位版本4位首部长度16位总长度8位生存时间8位协议16位首部校验和32位源IP地址和32位目标IP地址 网段划分子网-局域网子网掩码特殊的IP地址 公网IP地址与私网IP地址运营商路由路由表 数据链路层MAC帧格式局域网通信原理局域网数据碰撞 MTU分片…

AWS云中的VPC启用流日志保存S3(AWS中国云)

问题 需要在AWS中国云中对VPC启用流日志操作。 步骤 创建s3桶 这里设置一个s3桶名,创建即可。如果出现已存在具有相同名称的存储桶错误,就换个桶名再试一试吧。 启用vpc流日志 找到vpc流日志入口操作,如下图: 设置vpc流日志…

基于requests模块爬取网易云歌曲评论并制作热词云图

本实践大作业要求 本次实践大作业主要要求主要包括: 1、选择一个热点或者你感兴趣的主题作为本次爬虫实践作业要完成的任务。 2、为了完成本次任务,需要确定从网上爬取的数据对象与范围。 3、利用python及网络爬虫相关技术实现从网上爬取相应内容数据。 …

JJ-20H型水泥胶砂搅拌机

一、 用途和适用范围 水泥胶砂搅拌机是根据中国建材院水泥所的统一图纸制造,符合我国执行国际强度试验方法(ISO679)的标准设备。也可代替 JC/T722 用作GB/T17671 水泥胶砂试验方法的搅拌机。并可用作美国标准、欧洲标准、日本标准水泥试验的净…

如何从0构建一款类jest工具

Jest工作原理 Jest 是一个流行的 JavaScript 测试框架,特别适用于 React 项目,但它也可以用来测试任何 JavaScript 代码。Jest 能够执行用 JavaScript 编写的测试文件的原因在于其设计和内部工作原理。下面是 Jest 的工作原理及其内部机制的详细解释&…

Jackson和fastjson解决序列化时字段属性大小写改变的问题

在部分特殊场景下,我们可能会把实体的字段属性改成全部大写,但是在返回前端时,字段会被序列化成小写。 比如我们有一个这个类属性都是大写: 后端接口是这样的 然后我们请求后,会发现我们的字段被变成全部小写的。 …

Baidu Comate最详细教程(含license码)!扫二维码即可得文心4.0 VIP90天免费使用

Baidu Comate最详细教程(含license码)!扫二维码即可得文心4.0 VIP90天免费使用 安装 方法一:点击链接 comate安装链接 方法二:扫描图片二维码 支持所有常见IDE,包括VSCode、JetBrains系列(包含…

【课程作业】嵌入式系统与设计上机作业(作业九十)

个人名片: 🎓作者简介:嵌入式领域优质创作者🌐个人主页:妄北y 📞个人QQ:2061314755 💌个人邮箱:[mailto:2061314755qq.com] 📱个人微信:Vir2025WB…

Qt实战项目——贪吃蛇

一、项目介绍 本项目是一个使用Qt框架开发的经典贪吃蛇游戏,旨在通过简单易懂的游戏机制和精美的用户界面,为玩家提供娱乐和编程学习的机会。 二、主要功能 2.1 游戏界面 游戏主要是由三个界面构成,分别是游戏大厅、难度选择和游戏内界面&a…

three.js 第六节 - 纹理以及贴图【.hdr文件(hdr贴图)】- 色彩空间

素材 这是素材 更多素材、案例、项目 好几个G一共,加我q178373168,60大洋拿走 源码 源码 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls…

渗透测试工程师常见面试33题

问1:关于sql注入,都分为那些? 答1:主要分为两个大类,有回显和无回显。其中无回显的称为盲注,包括时间盲注、DNSlog注入也算一种,布尔盲注;有回显的包括联合注入、报错注入、宽字节注…