前段时间少帅下飞机挺火的,各种版本都有,甚至还有二进制,CAD版本,闲得无聊我也弄了个python版本的,原理就是边缘检测,这里用的canny算子,大家也可以尝试其他算子,至于参数可以自己适当的调整。
需要用到opencv库
pip install opencv-python
然后把这一行代码里的视频改成自己视频的名称(路径自己设置)
cap = cv2.VideoCapture('video.mp4')
完整代码如下
import cv2
# 打开视频文件
cap = cv2.VideoCapture('video.mp4')
if not cap.isOpened():
print("Error: Could not open video.")
exit()
# 获取视频的帧率和帧大小
fps = cap.get(cv2.CAP_PROP_FPS)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output_line_art_video.avi', fourcc, fps, (frame_width, frame_height))
if not out.isOpened():
print("Error: Could not open video writer.")
cap.release()
exit()
try:
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 转换为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 减少噪声
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 使用Canny边缘检测器
edges = cv2.Canny(blurred, 50, 150)
# 确保图像尺寸匹配
if edges.shape[1] != frame_width or edges.shape[0] != frame_height:
resized_edges = cv2.resize(edges, (frame_width, frame_height))
out.write(resized_edges)
else:
out.write(edges)
# 显示处理后的帧
cv2.imshow('Line Art', edges)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
finally:
# 释放资源并关闭窗口
cap.release()
out.release()
cv2.destroyAllWindows()
如果觉得视频播放得过快或者过慢可以更改这一句括号里面的数字进行调整,默认是int类型(整数)
if cv2.waitKey(10) & 0xFF == ord('q'):
效果如下