我是靠谱客的博主 谨慎冥王星,这篇文章主要介绍使用OpenCV读取视频、图片并做简单处理1.OpenCV的安装与卸载2.视频、图片的处理3.释放资源,现在分享给大家,希望可以做个参考。

1.OpenCV的安装与卸载

在conda中安装opencv,打开Anaconda Prompt 使用国内镜像源安装opencv,命令如下:

复制代码
1
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

也可以安装opencv的另一个扩展包opencv-contrib-python,不安装扩展包也可以使用,命令如下:

复制代码
1
pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple

卸载opencv,使用命令

复制代码
1
pip uninstall opencv-python

Pycharm中没有cv2库的提示时,找到cv2安装的路径,将虚拟环境中的site-packagescv2中的cv2.pyd复制一份到site-packages(也就是上一级目录),重启一下pycharm就可以了。解决pycharm中的cv2库没有提示的问题(Python3+win10+opencv-python 4.6.0.66)icon-default.png?t=MBR7https://blog.csdn.net/weixin_43490422/article/details/127091826

2.视频、图片的处理

需要引用以下库

复制代码
1
2
3
4
5
6
7
8
9
10
import numpy as np import cv2 import matplotlib.pyplot as plt import pylab img0 = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]]) print(img0.shape) # 打印img0的行数和列数 plt.imshow(img0, cmap = 'gray') pylab.show() # 需要此语句来调用显示

使用VideoCaptuure命令读取图像

复制代码
1
2
3
4
# 从视频中读取图像,"01.mp4"可换为视频的绝对路径 cap = cv2.VideoCapture("01.mp4") # 从摄像头中读取图像 cap = cv2.VideoCapture(0)

通过cap.isOpened()判断是否提取成功

复制代码
1
print(cap.isOpened())

返回Ture则提取成功,返回Fluse则没有提取成功

复制代码
1
2
3
4
5
6
# 读取视频中的一帧 return_value, frame = cap.read() # 显示视频中的图像 plt.imshow(frame) pylab.show()

改变读取视频画面或者图片颜色通道的各种方法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用cv2.COLOR_BGR2RGB方法变换RGB三个通道的顺序 plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) # 将图片中的RGB三通道变为灰度通道 plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)) # 将RGB图片转换为HSV plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)) # 将图片二值化显示 img = cv2.imread("02.jpg") _, img_bw = cv2.threshold(img,128,200,cv2.THRESH_BINARY) plt.imshow(img_bw) print(img_bw) pylab.show()

图像的大小和缩放

复制代码
1
2
3
4
# 图像的放大与缩小 ,宽|高 img = cv2.resize(img, (500, 300)) plt.imshow(img) pylab.show()

roi:图像的截取

复制代码
1
2
3
4
# roi:截取部分图片 img_roi = img[100:300, 0:200] plt.imshow(img_roi) pylab.show()

Affine变换:移动、缩放、旋转、拉伸

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 读取图片 img = cv2.imread("02.jpg") # Affine变换:移动tx = 300,ty = 200,m为变换矩阵 # Affine缩放:x缩放 = 1,y缩放 = 2 m = np.float32([[1,0,300],[0, 2, 200]]) # m为变换矩阵 img_m = cv2.warpAffine(img, m, (500, 1000)) # 底图大小(500,1000) plt.imshow(img_m) pylab.show() # Affine旋转:theta(弧度,180/3.14) ,move_x = x轴右移值,move_y = y轴下移值 theta = 0.5 move_x = 100 move_y = 50 m = np.float32([[np.cos(theta), -np.sin(theta), move_x], [np.sin(theta), np.cos(theta), move_y]]) cols = 800 # 底图宽度 rows = 500 # 底图高度 img_dst = cv2.warpAffine(img,m,(cols,rows)) plt.imshow(img_dst) pylab.show() # Affine拉伸:src = 源图像四边形顶点坐标 ;dst = 目标图像对应的四边形顶点坐标 src = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]]) dst = np.float32([[0, 0], [100, 0], [0, 300], [300, 300]]) m = cv2.getPerspectiveTransform(src, dst) #通过src、dst计算得到变换矩阵 cols = 800 # 底图宽度 rows = 500 # 底图高度 img_dst = cv2.warpPerspective(img, m, (cols, rows)) plt.imshow(img_dst) pylab.show()
复制代码
1
图像模糊与锐化,高斯模糊类似于将图像梯度变平滑
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 读取图片 img = cv2.imread("02.jpg") # 图像的模糊 img = cv2.GaussianBlur(img, (49, 49), 1, 0) # 高斯模糊 pylab.show() # 图像的锐化 kernel = np.ones((3, 3), np.float32) / 8 kernel = -kernel kernel[0, :] = [-1, -1, -1] kernel[1, :] = [0, 0, 0] kernel[2, :] = [1, 1, 1] result = cv2.filter2D(img, -1, kernel) print(result.shape) print(result[0, 0]) plt.imshow(result * 500) pylab.show()

求图中图像的边缘

复制代码
1
2
3
4
5
6
# 读取图片 img = cv2.imread("02.jpg") # 求边缘 img_b = cv2.Canny(img,30,150) plt.imshow(img_b) pylab.show()

加水印

复制代码
1
2
3
4
5
6
7
8
9
# 加水印,"watermask1.png"为水印图片 wm = cv2.imread("watermask1.png") wm = cv2.resize(wm, (300, 300)) wm = 255 - wm img1 = cv2.resize(img, (300, 300)) print(wm.shape) plt.imshow(cv2.addWeighted(wm, 0.9, img1, 1, 0)) # 通过调节addWeighted函数权重可以调节图片亮度 pylab.show()

3.释放资源

在使用摄像头后及时释放,可以减小程序的内存消耗,提高运行流畅度

复制代码
1
2
3
4
5
6
7
8
# 打印frame的形状 print(frame.shape) # 释放摄像头 cap.release() # 截图图像中的部分区域 roi = frame[100:400, 200:500] plt.imshow(roi) pylab.show()

最后

以上就是谨慎冥王星最近收集整理的关于使用OpenCV读取视频、图片并做简单处理1.OpenCV的安装与卸载2.视频、图片的处理3.释放资源的全部内容,更多相关使用OpenCV读取视频、图片并做简单处理1.OpenCV内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部