opencv零基础笔记

  • 后续还会更,暂时先发出来一起学习

1 数据读取图像

  • ilepath:要读入图片的完整路径
  • flags:读入图片的标志
  • cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道(阿尔法通道(α Channel或Alpha Channel)是指一张图片的透明和半透明度)
  • cv2.IMREAD_GRAYSCALE:读入灰度图片
  • cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
import cv2
import numpy as np 
import matplotlib.pylab as plt
# 读取图像(opencv读取的图像格式为BGR)
img_bgr = cv2.imread('dog.jpeg')
# 显示图像,创建窗口(下列代码需在本地,notbook不支持弹框显示)
# cv2.imshow('imge', img)
# 等待时间,毫秒级,0表示任意键终止,其余数字表示时间
# cv2.waitKey(0)
# cv2.destroyAllWindows()

# 后续可定义展示单张图片的方法
# def cv_show(name, img):
#     cv2.imshow(name, img)
#     cv2.waitKey(0)
#     cv2.destroyAllWindows()
# 使用matplotlib显示图像(读取的图片为RGB格式)

img_rgb = cv2.cvtColor(img_bgr,cv2.COLOR_BGR2RGB) #将BGR格式转换为RGB格式
plt.imshow(img_rgb)          #根据数组绘制图像
plt.show()               #显示图像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A4LTarSV-1644653384016)(output_5_0.png)]

# 图像保存
cv2.imwrite('caidog.png',img_bgr)
True

2 读取视频

  • VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
  • vc.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
  • cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,参数是1,表示延时1ms切换到下一帧图像,对于视频而言;参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键是if条件句成立
  • 调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。
# 视频读取(这个也需要本地运行)
# vc = cv2.VideoCapture('MOT.mp4')
# 检查是否打开正确
# if vc.isOpened():
#     open, frame = vc.read()
# else:
#     open = False

# while open:
#     ret, frame = vc.read()
#     if frame is None:
#         break
#     if ret == True:
#         gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 单帧图像处理:图像转为灰度图,当然也可以去掉或转为其它,根据情况而论
#         cv2.imshow('result', gray)
#         if cv2.waitKey(10) & 0xFF == 27:
#             break
# vc.release()
# cv2.destroyAllWindows()
import imageio
import matplotlib.animation as animation
from IPython.display import HTML
import numpy as np
# 使用matplotlib+opencv读取视频
# 定义一个展示视频的函数
def display(driving, fps, size=(8, 6)):
    fig = plt.figure(figsize=size)
    ims = []
    for i in range(len(driving)):
        cols = []
        cols.append(driving[i])
        im = plt.imshow(np.concatenate(cols, axis=1), animated=True)
        plt.axis('off')
        ims.append([im])
    video = animation.ArtistAnimation(fig, ims, interval=1000.0/fps, repeat_delay=1000)
    plt.close()
    return video

# 展示一下输入的视频, 如果视频太大,时间会非常久,可以跳过这个步骤
video_path = 'MOT.mp4'
video_frames = imageio.mimread(video_path, memtest=False)

# 获得视频的原分辨率
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
# 显示在notbook中
re(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
# 显示在notbook中
HTML(display(video_frames, fps).to_html5_video())
Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐