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

您所在的位置:网站首页 简单欧式沙发裁剪图纸视频 Python Opencv 简单视频裁剪功能的实现

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

2024-07-16 02:55| 来源: 网络整理| 查看: 265

本篇文章基于

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

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

import cv2 as cv def 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()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3