文章目录
相关链接
CSDN标题里个括号对应视频的分P
运行环境
- Python:3.11.5
- Anaconda:23.7.4
- IDE:vscode
- 运行环境:Windows
- OpenCV:4.8.1
前言
本节课来了解以下OpenCV的简单使用和图像的简单信息
计算机图形
彩色图形 R/G/B三通道 灰度图形 0-255的灰度矩阵
OpenCV简单使用
我们使用之前要确保环境运行正确。
python
import cv2
import sys
# 打印Python版本
print(sys.version)
# 打印OpenCV版本
print(cv2.__version__)
这个是我本地的运行结果,如果运行成功则说明环境配置正确
图形读取
cat.png
文件路径
文件读取
python
#%%
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread(r'cat.png')
print(img)
# %%
文件读取可能会出现的问题:路径不对
目前的路径是
- OpenCV_Python
- Python
- 4
- test1.py
- cat.png
- 4
- Python
Vscode认为我们读取文件的路径是从Python起步的,所以没找到Python/cat.png文件
如果想正常读取,则需要将代码改为
python
#%%
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('Python\\4\\cat.png')
print(img)
# %%
但是这样就不能运行Jupyter了。因为Jupyter只执行当前代码。
解决方案
修改Vscode 工作区,改成运行文件夹的根目录即可
运行成功!
其它路径问题解决方案
如果实在不行,直接vscode复制相对文件位置即可
opencv读取图片(绝对路径和相对路径,新手常踩的坑)
python配置opencv环境后,读取图片,报错:can't open/read file: check file path/integrity
图像显示+保存
python
#%%
#%%
import cv2
import matplotlib.pyplot as plt
import numpy as np
img_rgb = cv2.imread('cat.png')
# 彩色图像转灰度图像
img_gray = cv2.imread('cat.png',cv2.IMREAD_GRAYSCALE)
# 打印图像的矩阵
print(img_rgb)
# 打印图像的长,宽,通道数(彩色3通道,黑白0通道)
print(img_rgb.shape)
print(img_gray)
print(img_gray.shape)
# 打印图像,因为OpenCV读取图像是BGR的顺序,还是要使用内置的读取方式
# image是我们取的窗口名,img是我们的图像输入
cv2.imshow('image',img_gray)
# 输入任意键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存图像
cv2.imwrite('save_cat.png',img_gray)
# %%
OpenCV视频
视频素材如何获取?
这里推荐一个B站视频下载器
我们搜索视频素材使用关键词:视频素材+XX。
比如我们要下载一个汽车的视频,我们就在B站上面搜索:视频素材 汽车
或者找个视频素材的Up主。
我这里随便找了一个
然后下载器里面下载
下载成功
简单视频读取
python
# %%
# 导入包
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 导入视频
input_video = {}
# 下载好的视频文件
input_video['vc'] = cv2.VideoCapture('video_30.mp4')
# 判断是否读取成功
if input_video['vc'].isOpened():
# Python语法,元组读取
input_video['open'] = input_video['vc'].read()
else:
input_video['open'] = False
# 循环帧读取,两个退出条件:视频播放完/输入'ESC'退出
while input_video['open']:
open,frame = input_video['vc'].read()
if frame is None:
break;
if open:
# 我们先播放灰度图像
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# 打开一个名为result的窗口,播放帧
cv2.imshow('result',gray)
# 这个是特殊组合,waiteKey指每帧的时间,输入'esc'退出视频播放
if cv2.waitKey(10) & 0xff == 27:
break;
# 释放视频输入流
input_video['vc'].release();
# 关闭所有窗口
cv2.destroyAllWindows();
如果想指定退出键,可以使用ord
函数