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