使用OpenCV读取视频、图片并做简单处理
admin
2024-05-09 06:07:50
0

1.OpenCV的安装与卸载

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

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

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

pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple

卸载opencv,使用命令

pip uninstall opencv-python

Pycharm中没有cv2库的提示时,找到cv2安装的路径,将虚拟环境中的site-packages\cv2中的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.视频、图片的处理

需要引用以下库

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命令读取图像

# 从视频中读取图像,"01.mp4"可换为视频的绝对路径
cap = cv2.VideoCapture("01.mp4")
# 从摄像头中读取图像
cap = cv2.VideoCapture(0)

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

print(cap.isOpened())

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

# 读取视频中的一帧
return_value, frame = cap.read()
# 显示视频中的图像
plt.imshow(frame)
pylab.show()

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

# 使用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()

图像的大小和缩放

# 图像的放大与缩小 ,宽|高
img = cv2.resize(img, (500, 300))
plt.imshow(img)
pylab.show()

roi:图像的截取

# roi:截取部分图片
img_roi = img[100:300, 0:200]
plt.imshow(img_roi)
pylab.show()

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

# 读取图片
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()
图像模糊与锐化,高斯模糊类似于将图像梯度变平滑
# 读取图片
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()

求图中图像的边缘

# 读取图片
img = cv2.imread("02.jpg")
# 求边缘
img_b = cv2.Canny(img,30,150)
plt.imshow(img_b)
pylab.show()

加水印

# 加水印,"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.释放资源

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

# 打印frame的形状
print(frame.shape)
# 释放摄像头
cap.release()
# 截图图像中的部分区域
roi = frame[100:400, 200:500]
plt.imshow(roi)
pylab.show()

相关内容

热门资讯

别小齐的表哥是谁? 别小齐的表哥是谁?别小气的表哥应该是很大气,正好跟他相反的意思。
我是大女儿,与我弟弟相差12岁... 我是大女儿,与我弟弟相差12岁,父母偏爱他吧很正常。一定要想开。你也应该和父母一起疼爱他。但是,绝对...
为什么网上很多都说周杰伦不如刘... 为什么网上很多都说周杰伦不如刘德华?就因为刘德华是长辈吗?刘德华只不过是过时的明星而已公正的说,写歌...
“诺颜”和“莫离”哪一个笔名好... “诺颜”和“莫离”哪一个笔名好听?请陈述理由。要看写作风格,(虽然两个都挺玛丽苏的),走甜美校园洛丽...
明星真人秀真的有剧本么? 明星真人秀真的有剧本么?我觉得明星真人秀确实是有剧本的,因为只有剧本才能够表现的这么流畅,这么的有话...
求钢之炼金术师每集预告后的一句... 求钢之炼金术师每集预告后的一句话.在fa里每集看完后后.预告里都有个大叔在说话.在说完下一集标题后都...
极品飞车9音乐补丁放在什么位置 极品飞车9音乐补丁放在什么位置在你的安装目录,program files/你安装的极品飞车9位置(英...
男生汗毛重是怎么回事? 男生汗毛重是怎么回事?男性汗毛多是正常的表现,一般与雄激素有密切关系。雄激素是促进机体汗毛生长的,男...
对爱情太理想化,我错了吗? 对爱情太理想化,我错了吗?你很清楚自己对爱情的期待太过理想化,只是苦于无法改变,也无法放弃,这种矛盾...
貌似天仙和貌若天仙的,意思都是... 貌似天仙和貌若天仙的,意思都是指女子长的像天仙一样漂亮是吗?是的,比方说,某某某貌若天仙,或是貌若天...
在书店看到了一本书,是紫色壳子... 在书店看到了一本书,是紫色壳子的上面有白色的花,是一本古言,放在醉玲珑旁边的,但是我忘记看名字了在书...
给小孩报兴趣班有用吗? 给小孩报兴趣班有用吗?小孩儿把兴趣班,当然有用,但是这个用处有多少,就是你当别人的,也不动,小朋友,...
我国古代关于准备的故事 我国古代关于准备的故事我国古代关于准备的故事有一个人,在某天晚上碰到了一个神仙。神仙告诉他,有大事要...
孟买酒店女孩为什么逃走 孟买酒店女孩为什么逃走《孟买酒店》女孩逃走,是为了后面的情节发展,利于剧情的展开。因为如果不是这样,...
推荐一些语言风格温暖的作家吗。... 推荐一些语言风格温暖的作家吗。(不要说冰心、张晓风、毕淑敏什么的) 温暖哦 温暖 温暖第一首选当然是...
姓曾的人的祖先是谁? 姓曾的人的祖先是谁?曾阿牛= =?
一起来又看流星雨26集在哪能看... 一起来又看流星雨26集在哪能看?一起来又看流星雨26集在哪能看?去海南电影 那看都出28集了还26了...
请大家用香港人取英文名的习惯帮... 请大家用香港人取英文名的习惯帮我改个英文名,我叫张云霞,谢谢Cheung(张) Wan(云) Har...
老年人的夏季养生攻略 (图片由AI生成) 夏季来临,气温升高,老年人由于身体机能逐渐下降,更需要注重养生。那么,老年人夏...
梅林街道一间社区厨房因独特美食... ▲这家社区厨房因独特美食,吸引不少市民来尝鲜,同时也成为“巴铁”们慰藉乡愁的地方。 老板娘为食客们...