1 changed files with 59 additions and 0 deletions
@ -0,0 +1,59 @@ |
|||
import cv2 |
|||
import numpy as np |
|||
import sys |
|||
|
|||
def convert_to_red_pseudo_color(input_path, output_path): |
|||
""" |
|||
将自然光视频转换为红色伪彩效果 |
|||
""" |
|||
# 打开视频 |
|||
cap = cv2.VideoCapture(input_path) |
|||
if not cap.isOpened(): |
|||
print("❌ 无法打开视频文件,请检查路径是否正确") |
|||
return |
|||
|
|||
# 获取视频参数 |
|||
fps = cap.get(cv2.CAP_PROP_FPS) |
|||
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) |
|||
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) |
|||
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) |
|||
print(f"✅ 视频已加载,总帧数: {total_frames}, 分辨率: {width}x{height}, 帧率: {fps}") |
|||
|
|||
# 创建视频写入对象 |
|||
fourcc = cv2.VideoWriter_fourcc(*'mp4v') |
|||
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height)) |
|||
|
|||
frame_count = 0 |
|||
while True: |
|||
ret, frame = cap.read() |
|||
if not ret: |
|||
break |
|||
|
|||
# 转为灰度图 |
|||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) |
|||
|
|||
# 纯红色伪彩 |
|||
red_pseudo = np.zeros_like(frame) |
|||
red_pseudo[:, :, 2] = gray # BGR 红色通道 |
|||
|
|||
# 增强效果 |
|||
red_pseudo = cv2.convertScaleAbs(red_pseudo, alpha=1.6, beta=35) |
|||
|
|||
out.write(red_pseudo) |
|||
frame_count += 1 |
|||
|
|||
if frame_count % 100 == 0: |
|||
print(f"处理进度: {frame_count}/{total_frames} ({frame_count/total_frames*100:.1f}%)") |
|||
|
|||
cap.release() |
|||
out.release() |
|||
print("\n🎉 转换完成!") |
|||
|
|||
if __name__ == "__main__": |
|||
# 支持命令行传参 |
|||
if len(sys.argv) != 3: |
|||
print("使用方法:python 脚本名.py 输入视频路径 输出视频路径") |
|||
else: |
|||
input_video = sys.argv[1] |
|||
output_video = sys.argv[2] |
|||
convert_to_red_pseudo_color(input_video, output_video) |
|||
Loading…
Reference in new issue