【机器视觉】OpenCV-Python 视频基本操作

简介: 【机器视觉】OpenCV-Python 视频基本操作
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 设置兼容中文
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
  warnings.warn("loaded more than 1 DLL from .libs:\n%s" %

1.视频文件的读取

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

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

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

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

# 获取视频对象
cap = cv.VideoCapture('viedo/DOG.wmv')
# 判断是否获取成功
print(cap.isOpened())
True


while(cap.isOpened()):
    # 获取每一帧的图像
    ret,frame = cap.read()
    # 获取成功显示图像
    if ret == True:
        cv.imshow('frame',frame)
    # 每一帧间隔25ms 当视频播放完毕,且按下q键时,会弹出循环
    if cv.waitKey(25) & 0xFF == ord('q'):
        break
# 释放视频对象
cap.release()
cv.destroyAllWindows()

2.视频文件的保存

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

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

# 读取视频
cap = cv.VideoCapture('viedo/DOG.wmv')
# 获取视频的宽和高
width = int(cap.get(3))
height = int(cap.get(4))
print("宽:",width,",高:",height)
宽: 444 ,高: 480


# 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
out = cv.VideoWriter('viedo/outpy.avi',cv.VideoWriter_fourcc('M','J','P','G'),10,(width,height))
# 
while(True):
    ret,frame = cap.read()
    if ret==True:
        # 将每一帧图像写入一个文件中
        out.write(frame)
    else:
        # 读取完毕
        break
# 释放资源
cap.release()
out.release()
cv.destroyAllWindows()
print("保存成功!")
保存成功!

总结

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

3.MeanShift实现视频追踪

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

# 获取视频
cap = cv.VideoCapture('viedo/DOG.wmv')
# 获取第一帧图像
ret,frame = cap.read()
# 指定第一帧图像上的目标位置 (行,高,列,宽)
r,h,c,w = 197,141,0,208
track_window = (c,r,w,h)
# 指定目标的感兴趣区域
roi = frame[r:r+h,c:c+w]
# 计算直方图
# 转换色彩空间(HSV)
hsv_roi = cv.cvtColor(roi,cv.COLOR_BGR2HSV)
# 计算直方图
roi_hist = cv.calcHist([hsv_roi],[0],None,[180],[0,180])
# 归一化 min_max归一化
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
array([[2.3043747e+00],
       [3.1423289e-01],
       [5.2372152e-01],
       [9.4269872e-01],
       [3.1423289e-01],
       [9.6888477e-01],
       [4.6611214e+00],
       [1.3878620e+00],
       [4.5563769e+00],
       [4.3730745e+00],
       [1.4507086e+01],
       [5.4205173e+01],
       [8.2669441e+01],
       [6.8764633e+01],
       [6.6434074e+01],
       [7.7222733e+01],
       [2.5500000e+02],
       [4.2971348e+01],
       [1.5790203e+01],
       [2.3043747e+00],
       [1.5711645e+00],
       [2.6186076e-01],
       [1.0474430e-01],
       [1.3093038e-01],
       [7.8558221e-02],
       [0.0000000e+00],
       [1.3093038e-01],
       [5.2372150e-02],
       [1.0474430e-01],
       [2.6186075e-02],
       [2.6186076e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [3.1423289e-01],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [1.7806531e+00],
       [8.3795440e-01],
       [6.2846577e-01],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [4.1897721e+00],
       [0.0000000e+00],
       [1.7806531e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.1521873e+00],
       [3.4827480e+00],
       [0.0000000e+00],
       [7.8034506e+00],
       [1.1521873e+00],
       [7.5939620e-01],
       [1.6759088e+00],
       [0.0000000e+00],
       [7.9605670e+00],
       [1.1521873e+00],
       [8.4842882e+00],
       [2.6186075e-02],
       [1.3093038e-01],
       [9.4269872e-01],
       [1.0474430e-01],
       [0.0000000e+00],
       [1.4926063e+00],
       [0.0000000e+00],
       [6.2846577e-01],
       [2.6186075e-02],
       [8.3795440e-01],
       [6.5465188e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [6.0227972e-01],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.4614911e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [8.3795440e-01],
       [0.0000000e+00],
       [2.0948860e-01],
       [5.2372152e-01],
       [5.2372152e-01],
       [1.0474430e-01],
       [4.1897720e-01],
       [5.2372152e-01],
       [1.0474430e-01],
       [2.6709797e+00],
       [1.0736290e+00],
       [8.3795440e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.3093038e-01],
       [1.3093038e-01],
       [1.3878620e+00],
       [4.1897720e-01],
       [1.2569315e+00],
       [3.1423289e-01],
       [2.0948860e-01]], dtype=float32)



# 目标追踪
# 设置窗口搜索终止条件,最大迭代次数,窗口中心飘移最小值
term_crit = (cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT,10,1)
while(True):
    ret,frame = cap.read()
    if ret == True:
        # 计算直方图的反向投影
        hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        dst = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)
        # 进行meanshift目标追踪
        ret,track_window = cv.meanShift(dst,track_window,term_crit)
        # 将追踪的位置绘制在视频中
        x,y,w,h = track_window
        res = cv.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2)
        cv.imshow('frame',res)
        # 终止
        if cv.waitKey(60) & 0xFF == ord('q'):
            break
    else:
        break
# 释放资源
cap.release()
cv.destroyAllWindows()

4.CamShift算法实现视频追踪

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

# 获取视频
cap = cv.VideoCapture('viedo/DOG.wmv')
# 获取第一帧图像
ret,frame = cap.read()
# 指定第一帧图像上的目标位置 (行,高,列,宽)
r,h,c,w = 197,141,0,208
track_window = (c,r,w,h)
# 指定目标的感兴趣区域
roi = frame[r:r+h,c:c+w]
# 计算直方图
# 转换色彩空间(HSV)
hsv_roi = cv.cvtColor(roi,cv.COLOR_BGR2HSV)
# 计算直方图
roi_hist = cv.calcHist([hsv_roi],[0],None,[180],[0,180])
# 归一化 min_max归一化
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
array([[2.3043747e+00],
       [3.1423289e-01],
       [5.2372152e-01],
       [9.4269872e-01],
       [3.1423289e-01],
       [9.6888477e-01],
       [4.6611214e+00],
       [1.3878620e+00],
       [4.5563769e+00],
       [4.3730745e+00],
       [1.4507086e+01],
       [5.4205173e+01],
       [8.2669441e+01],
       [6.8764633e+01],
       [6.6434074e+01],
       [7.7222733e+01],
       [2.5500000e+02],
       [4.2971348e+01],
       [1.5790203e+01],
       [2.3043747e+00],
       [1.5711645e+00],
       [2.6186076e-01],
       [1.0474430e-01],
       [1.3093038e-01],
       [7.8558221e-02],
       [0.0000000e+00],
       [1.3093038e-01],
       [5.2372150e-02],
       [1.0474430e-01],
       [2.6186075e-02],
       [2.6186076e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [3.1423289e-01],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.0948860e-01],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [1.7806531e+00],
       [8.3795440e-01],
       [6.2846577e-01],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [4.1897721e+00],
       [0.0000000e+00],
       [1.7806531e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.1521873e+00],
       [3.4827480e+00],
       [0.0000000e+00],
       [7.8034506e+00],
       [1.1521873e+00],
       [7.5939620e-01],
       [1.6759088e+00],
       [0.0000000e+00],
       [7.9605670e+00],
       [1.1521873e+00],
       [8.4842882e+00],
       [2.6186075e-02],
       [1.3093038e-01],
       [9.4269872e-01],
       [1.0474430e-01],
       [0.0000000e+00],
       [1.4926063e+00],
       [0.0000000e+00],
       [6.2846577e-01],
       [2.6186075e-02],
       [8.3795440e-01],
       [6.5465188e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [6.0227972e-01],
       [0.0000000e+00],
       [1.0474430e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [2.4614911e+00],
       [0.0000000e+00],
       [1.0474430e-01],
       [8.3795440e-01],
       [0.0000000e+00],
       [2.0948860e-01],
       [5.2372152e-01],
       [5.2372152e-01],
       [1.0474430e-01],
       [4.1897720e-01],
       [5.2372152e-01],
       [1.0474430e-01],
       [2.6709797e+00],
       [1.0736290e+00],
       [8.3795440e-01],
       [0.0000000e+00],
       [0.0000000e+00],
       [0.0000000e+00],
       [1.3093038e-01],
       [1.3093038e-01],
       [1.3878620e+00],
       [4.1897720e-01],
       [1.2569315e+00],
       [3.1423289e-01],
       [2.0948860e-01]], dtype=float32)



# 目标追踪
# 设置窗口搜索终止条件,最大迭代次数,窗口中心飘移最小值
term_crit = (cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT,10,1)
while(True):
    ret,frame = cap.read()
    if ret == True:
        # 计算直方图的反向投影
        hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        dst = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)
        # 进行meanshift目标追踪
        ret,track_window = cv.CamShift(dst,track_window,term_crit)
        # 将追踪的位置绘制在视频中
        pts = cv.boxPoints(ret)
        pts = np.int0(pts)
        res = cv.polylines(frame,[pts],True,255,2)
        cv.imshow('frame',res)
        # 终止
        if cv.waitKey(60) & 0xFF == ord('q'):
            break
    else:
        break
# 释放资源
cap.release()
cv.destroyAllWindows()

总结

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

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

目录
相关文章
|
8天前
|
自然语言处理 数据挖掘 开发者
Python腾讯视频16978条弹幕,发现弹幕比剧还精彩
Python腾讯视频16978条弹幕,发现弹幕比剧还精彩
21 4
Python腾讯视频16978条弹幕,发现弹幕比剧还精彩
|
2月前
|
Python
Python使用ffmpeg下载m3u8拼接为视频
Python使用ffmpeg下载m3u8拼接为视频
106 1
|
2月前
|
存储 Python
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】python之人工智能应用篇——视频生成技术
视频生成技术是一种基于深度学习和机器学习的先进技术,它使得计算机能够根据给定的文本、图像、视频等单模态或多模态数据,自动生成符合描述的、高保真的视频内容。这种技术主要依赖于深度学习模型,如生成对抗网络(GAN)、自回归模型(Auto-regressive Model)、扩散模型(Diffusion Model)等。其中,GAN由两个神经网络组成:一个生成器用于生成逼真的图像或视频,另一个判别器用于判断生成的图像或视频是否真实。通过不断的对抗学习,生成器和判别器共同优化,以产生更高质量的视频。
10 2
|
27天前
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
【7月更文挑战第23天】在数据驱动时代,Python的Matplotlib、Seaborn与Plotly等库使数据可视化成为洞察信息的关键工具。不仅转化数字为图形,更是视觉传达故事。示例代码展示从基础图表到箱线图、小提琴图和热力图的创建过程,强调选择合适图表、简洁设计与色彩的重要性。Python赋能数据可视化,开启数据理解新视角,助于揭示模式、辅助决策。✨📊💡 (总计239字符)
39 7
|
28天前
|
机器学习/深度学习 数据可视化 开发者
视觉的力量!Python 机器学习模型评估,Matplotlib 与 Seaborn 如何助力决策更明智?
【7月更文挑战第23天】在Python机器学习中,模型评估不可或缺。Matplotlib与Seaborn作为数据可视化工具,助力洞察模型性能。Matplotlib基础灵活,构建复杂图表;Seaborn在其上层,简化绘图,提升美观。从折线图追踪损失到条形图对比准确率,两者互补,促进高效决策制定。尽管Matplotlib掌控力强,但Seaborn友好快捷,适于统计图形。结合使用,可将数据转化成深刻见解。
26 6
|
13天前
|
数据采集 JSON 数据处理
基于Python的B站(哔哩哔哩)视频评论采集,可破解反爬手段,想爬几条爬几条
本文介绍了一个基于Python的B站(哔哩哔哩)视频评论采集工具,能够通过输入视频的av号、BV号或链接,并使用特定的cookie和请求头信息来绕过反爬手段,实现大规模的评论数据采集,并支持将数据解析并保存为CSV格式。
|
1月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
2月前
|
计算机视觉 Python
【干货】Python玩转各种多媒体,视频、音频到图片
【干货】Python玩转各种多媒体,视频、音频到图片
36 1
|
2月前
|
编解码 Linux 计算机视觉
python 调用ffmpeg使用usb摄像头录制视频,输出h264格式,自动获取摄像头的最佳帧率和最大画面尺寸
使用 Python 调用 FFmpeg 进行 USB 摄像头视频录制,需先确保安装 FFmpeg 和 Python 的 `subprocess` 模块。代码示例展示了如何自动获取摄像头的最佳帧率和最大分辨率,然后录制视频。首先通过 FFmpeg 列出摄像头格式获取信息,解析出帧率和分辨率,选择最优值。之后调用 FFmpeg 命令录制视频,设置帧率、分辨率等参数。注意 `/dev/video0` 是 Linux 的摄像头设备路径,Windows 系统需相应调整。代码中未直接实现自动获取最佳参数,通常需要借助其他库如 OpenCV。
165 3