本篇文章基于

https://blog.csdn.net/u014361280/article/details/106157012

对其中一些错误进行指正。
下面先放上原文内的代码

import cv2 as cvdef main():# 导入视频文件,参数:0 自带摄像头,1 USB摄像头,为文件名时读取视频文件video_caputre = cv.VideoCapture(r"D:\CloudMusic\MV\排骨教主 - 入画.mp4")# 获取读入视频的参数fps = video_caputre.get(cv.CAP_PROP_FPS)width = video_caputre.get(cv.CAP_PROP_FRAME_WIDTH)height = video_caputre.get(cv.CAP_PROP_FRAME_HEIGHT)print("fps:", fps)print("width:", width)print("height:", height)# 定义截取尺寸,后面定义的每帧的h和w要于此一致,否则视频无法播放# 注意 这里是高宽 (height, width)size = (int(height), int(width / 2))# 创建视频写入对象videp_write = cv.VideoWriter("videoFrameTarget.avi", cv.VideoWriter_fourcc('M', 'J', 'P', 'G'), fps, size)# 读取视频帧,然后写入文件并在窗口显示success, frame_src = video_caputre.read()while success and not cv.waitKey(1) == 27: #读完退出或者按下 esc 退出# [width, height] 要与上面定义的size参数一致,注意参数的位置frame_target = frame_src[0:int(width/2), 0:int(height)]# 写入视频文件videp_write.write(frame_target)# 显示裁剪的视频和原视频cv.imshow("video", frame_target)cv.imshow("Video_src", frame_src)# 不断读取success, frame_src = video_caputre.read()print("视频裁剪完成")# 销毁窗口,释放资源cv.destroyWindow("video")cv.destroyWindow("Video_src")video_caputre.release()if __name__=="__main__":main()

其中写到

    # 注意 这里是高宽 (height, width)size = (int(height), int(width / 2))

在我实际的使用中发现是错误的,他的文章里有显示运行结果。

仔细查看可以发现裁剪后的视频下方的黑条也被裁减掉了,当时他可能并没有发现这个问题,而我在跑的时候放的是没有黑条的视频,所以很明显察觉到视频高度少了,而显示的视频高度刚好是视频宽度/2得到的值,也就是说视频高宽设定是在哪里出了问题的。

在经过我的不断尝试之后发现,size这一行的代码依然是“宽高”而不是“高宽”,真正要写成“高宽”的是以下这一行:

target=frame[0:int(high),int(width/4):int(width/2+width/4)]    #注意这里是高宽

其中冒号前数字表示起始像素,后面数字表示结束像素,我当前的代码表示截取视频的正中心


这样之后只裁剪了宽度,高度并没有差别,代码如下:

import cv2 as cv
cap=cv.VideoCapture("D:\CloudMusic\MV\毛不易 - 东北民谣.mp4")
#获取视频参数
width=cap.get(3)
high=cap.get(4)
fps=cap.get(5)size=(int(width/2),int(high))
#定义编解码器并创建VideoWriter对象
fourcc=cv.VideoWriter_fourcc(*'XVID')
out=cv.VideoWriter('D:\CloudMusic\MV\毛不易 - 东北民谣_clip.avi',fourcc,fps,size)while(cap.isOpened()):ret,frame=cap.read()target=frame[0:int(high),int(width/4):int(width/2+width/4)]    #注意这里是高宽out.write(target)cv.imshow("frame_src",frame)cv.imshow("frame",target)k=cv.waitKey(1)if(k==ord('q')): #退出播放并停止采集break
print("视频裁剪完成")
print("原视频尺寸:"+str(int(width))+'*'+str(int(high)))
print("裁剪后尺寸:"+str(int(width/2))+'*'+str(int(high)))
cv.destroyAllWindows()
cap.release()
out.release()

Python Opencv 简单视频裁剪功能的实现相关推荐

  1. Python Opencv 之 简单的视频裁剪功能的实现

    Python Opencv 之 简单的视频裁剪功能的实现 目录 Python Opencv 之 简单的视频裁剪功能的实现 一.简单介绍 二.实现原理 三.注意实现 四.效果预览 五.实现步骤 这里实现 ...

  2. opencv自动裁切_荐Python Opencv 之 简单的视频裁剪功能的实现

    Python Opencv 之 简单的视频裁剪功能的实现 目录 一.简单介绍 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随 ...

  3. 体感游戏 | 手势识别玩飞机大战游戏(二) Python+OpenCV实现简易手势识别功能

    后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简单手势识别 使用OpenCV实现手势识别玩飞机大战游 ...

  4. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  5. python opencv写视频——cv2.VideoWriter()

    python opencv写视频--cv2.VideoWriter() 函数原型 cv2.VideoWriter() VideoWriter(filename, fourcc, fps, frameS ...

  6. python基础编程:Python实现FLV视频拼接功能

    这篇文章主要介绍了Python实现FLV视频拼接功能,本文给大家介绍的非常详细具有一定的参考借鉴价值,需要的朋友可以参考下 文章摘要 本文简单说明了FLV文件的格式,以此为出发点,使用 Python ...

  7. 解决Python OpenCV 读取视频并抽帧出现error while decoding的问题

    解决Python OpenCV 读取视频抽帧出现error while decoding的问题 1. 问题 2. 解决 3. 源代码 参考 1. 问题 读取H264视频,抽帧视频并保存,报错如下: [ ...

  8. 2020-12-03 Python OpenCV: 图片的裁剪

    Python OpenCV: 图片的裁剪 图片裁剪使用img[y0:y1, x0:x1],其中参数分别代表y轴和x轴的起始坐标,具体使用方法如下: import cv2img = cv2.imread ...

  9. python服务端语言_使用Python实现简单的服务器功能

    socket接口是实际上是操作系统提供的系统调用.socket的使用并不局限于Python语言,你可以用C或者Java来写出同样的socket服务器,而所有语言使用socket的方式都类似(Apach ...

  10. python图片转视频加特效_使用Python opencv实现视频与图片的相互转换

    因为最近要经常转换数据集进行实验,因此记录一下. 1.视频转图片 即为将视频解析为一帧一帧的图片: import cv2 vc=cv2.VideoCapture("/home/hqd/Pyc ...

最新文章

  1. Oracle 添加RAC数据库集群节点(一)
  2. 互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(二十六)...
  3. ABCpdf.NET 的简易使用指南
  4. switch和toggle在软件开发中的含义和区别
  5. dataTables插件使用
  6. 如何用控制台启动一个wcf服务
  7. java服务器与客户端项目,Java项目中用于服务器和客户端软件包的共...
  8. 【基础】弹出框的处理(五)
  9. 如何实现实时文本过滤
  10. Hexo + coding 博客的搭建和优化
  11. pxe无盘服务器教程,[教程]Synology+PXE挂载iSCSI网络无盘启动Win7(08.04更新)
  12. python自动推送消息_使用Python制作自动推送微信消息提醒的备忘录功能
  13. 传输指令——MOV、FMOV、BMOV、SMOV、SWAP
  14. 北京时间和格林威治时间互相转化 JavaScript
  15. Twitter账号总被关联封号? 如何解决?
  16. VS2022配置OpenCV 4.3.0报错解决办法
  17. 路缘石成型机工艺结构和使用标准解读
  18. 网站推荐:检索全球范围内有趣实用的网站【持续更新】
  19. phpnow安装apache失败及phpnow绑定域名解决方法,网站发布到外网
  20. 11.22没精打采的一天

热门文章

  1. x86 x64 IA64的关系和区别
  2. iphone屏幕圆角插件_苹果iPhone6s也能分屏?越狱新插件助你实现
  3. 前端实现base64解码编码
  4. Android 抽屉用法
  5. 用计算机表白我不喜欢你了,【北邮表白墙】与卿初相识,犹如故人归。表白计算机院的苏苏,喜欢你是我最正确的选择?...
  6. 工业镜头视场、倍率、焦距之间的关系
  7. JavaScript设计打字速度测试游戏的实现
  8. 《信号与系统》解读 第1章 信号与系统概述-1:信号与系统的描述和分析方法
  9. 带CAN唤醒能力的TJA1043
  10. CSS固定定位 将模块固定到版心右边