.raw后缀的文件转为jpg(压缩视频流转图片)

.raw后缀的文件转为jpg(压缩视频流转图片)

1.单.raw后缀文件转为jpg

bash 复制代码
import cv2
import numpy as np
import os

# 你的文件
raw_file = "5155.raw"
out_img = "FINAL_NORMAL_IMAGE.jpg"

# 读取裸流
with open(raw_file, "rb") as f:
    raw_data = f.read()

# 写入临时 .h264 文件(工业摄像头最常见格式)
temp_h264 = "temp.h264"
with open(temp_h264, "wb") as f:
    f.write(raw_data)

# 用 OpenCV + FFMPEG 硬解码视频流
cap = cv2.VideoCapture(temp_h264)
success = False

if cap.isOpened():
    ret, frame = cap.read()
    if ret:
        cv2.imwrite(out_img, frame)
        print("✅ 成功!正常图片已保存为:FINAL_NORMAL_IMAGE.jpg")
        success = True
    cap.release()

# 如果 H264 失败,尝试 H265
if not success:
    temp_265 = "temp.h265"
    with open(temp_265, "wb") as f:
        f.write(raw_data)
    
    cap = cv2.VideoCapture(temp_265)
    if cap.isOpened():
        ret, frame = cap.read()
        if ret:
            cv2.imwrite(out_img, frame)
            print("✅ 成功!正常图片已保存为:FINAL_NORMAL_IMAGE.jpg")
        cap.release()

# 清理临时文件
try:
    os.remove("temp.h264")
    os.remove("temp.h265")
except:
    pass

if not success:
    print("\n⚠️  你的摄像头流是:标准 YUV 裸流")
    print("我马上给你写专用版本!")

2.批量.raw后缀文件转jpg

bash 复制代码
import cv2
import os

# ===================== 配置 =====================
RAW_FOLDER   = "."          # .raw 所在文件夹(. 表示当前目录)
OUTPUT_FOLDER = "raw_images" # 输出图片保存到这里
TEMP_NAME    = "_temp.h264"
# ==================================================

# 创建输出文件夹
os.makedirs(OUTPUT_FOLDER, exist_ok=True)

# 遍历所有 .raw 文件
for fname in os.listdir(RAW_FOLDER):
    if fname.lower().endswith(".raw"):
        print(f"正在处理:{fname}")
        
        raw_path  = os.path.join(RAW_FOLDER, fname)
        save_path = os.path.join(OUTPUT_FOLDER, os.path.splitext(fname)[0] + ".jpg")

        # 读取裸流 → 写入临时 H264
        with open(raw_path, "rb") as f:
            data = f.read()
        with open(TEMP_NAME, "wb") as f:
            f.write(data)

        # 解码第一帧
        cap = cv2.VideoCapture(TEMP_NAME)
        ret, frame = cap.read()
        if ret:
            cv2.imwrite(save_path, frame)
            print(f"✅ 保存成功:{save_path}")
        else:
            print(f"❌ 解码失败:{fname}")
        
        cap.release()

# 清理临时文件
if os.path.exists(TEMP_NAME):
    os.remove(TEMP_NAME)

print("\n🎉 全部批量转换完成!图片在 raw_images 文件夹里")
相关推荐
一苇以航322 小时前
LE Audio低功耗蓝牙音频详解 (三)
音视频·蓝牙·ble·le audio
a里啊里啊5 小时前
软考-软件评测师:知识点整理(九)——其他杂项
音视频
苏州汇成元电子科技7 小时前
为什么越来越多AI设备开始使用I-PEX 81463-100B-02-D 30Pin极细同轴线束?
人工智能·音视频·硬件工程·信号处理·材料工程
ZC跨境爬虫8 小时前
跟着 MDN 学 HTML day_36:(深入理解 Comment 接口与 DOM 注释节点)
前端·javascript·ui·html·音视频·视频编解码
reasonsummer10 小时前
【教学类-160-25】20260507 AI视频培训-练习025“豆包AI视频《一日生活》+豆包图片风格:二次元
音视频·豆包
LCG元12 小时前
STM32实战:基于STM32F407的FFT频谱分析(音频信号处理)
stm32·音视频·信号处理
小何开发13 小时前
ffmpeg 安装与使用: 将视频分片与组装
ffmpeg·音视频
EasyDSS13 小时前
私有化视频会议系统/智能会议管理系统EasyDSS打造全场景音视频协作新生态
音视频
淘小白_TXB219613 小时前
微博图文视频批量采集软件用户手册
音视频
ZC跨境爬虫15 小时前
跟着 MDN 学 HTML day_37:(深入掌握 CustomEvent 自定义事件接口)
前端·javascript·ui·html·音视频