opencv读写文件操作

  1. 读取图像文件

    • OpenCV 中使用cv2.imread()函数来读取图像文件。这个函数的第一个参数是图像文件的路径,第二个参数是一个可选的标志,用于指定读取图像的方式。
    • 示例代码:

    import cv2

    以彩色模式读取图像(这是默认模式)

    img = cv2.imread('your_image.jpg', cv2.IMREAD_COLOR)
    if img is None:
    print("无法读取图像")
    else:
    print("图像读取成功,形状为:", img.shape)

  • 在这个示例中,cv2.IMREAD_COLOR(值为 1)表示以彩色模式读取图像。如果要以灰度模式读取,可以使用cv2.IMREAD_GRAYSCALE(值为 0),例如img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE)。如果想读取包含 alpha 通道的图像,可以使用cv2.IMREAD_UNCHANGED(值为 - 1)。
  1. 读取视频文件

    • 对于视频文件,使用cv2.VideoCapture()函数。它可以打开视频文件或者摄像头设备。
    • 示例代码:

    import cv2

    打开视频文件

    cap = cv2.VideoCapture('your_video.mp4')
    if not cap.isOpened():
    print("无法打开视频文件")
    else:
    while True:
    ret, frame = cap.read()
    if not ret:
    break
    # 在这里对每一帧进行处理,例如显示
    cv2.imshow('Video', frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
    break
    cap.release()
    cv2.destroyAllWindows()

  • 在这个示例中,cap.read()函数返回两个值。ret是一个布尔值,表示是否成功读取帧,frame是读取到的视频帧。cv2.waitKey()函数用于等待用户按键,参数是等待的时间(以毫秒为单位),这里等待 25 毫秒。如果用户按下q键,就退出循环。最后,cap.release()释放视频文件资源,cv2.destroyAllWindows()关闭所有打开的窗口。
  1. 写入图像文件

    • 使用cv2.imwrite()函数来保存图像。它的第一个参数是要保存的文件路径和文件名,第二个参数是要保存的图像数据。
    • 示例代码:

    import cv2
    img = cv2.imread('input_image.jpg', cv2.IMREAD_COLOR)

    进行一些图像处理,例如转换为灰度图

    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    保存处理后的图像

    cv2.imwrite('output_gray_image.jpg', gray_img)

  • 在这个示例中,首先读取了一张彩色图像,然后使用cv2.cvtColor()函数将其转换为灰度图,最后将灰度图保存为一个新的文件。
  1. 写入视频文件

    • 要写入视频文件,需要先创建一个cv2.VideoWriter对象。这个对象的构造函数需要指定输出视频文件的路径、视频编解码器、帧率和视频尺寸等参数。
    • 示例代码:

    import cv2

    读取视频文件

    cap = cv2.VideoCapture('input_video.mp4')
    if not cap.isOpened():
    print("无法打开输入视频文件")
    else:
    # 获取视频的帧率、尺寸等信息
    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))
    # 创建VideoWriter对象,使用MJPG编解码器
    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
    out = cv2.VideoWriter('output_video.avi', fourcc, fps, (width, height))
    while True:
    ret, frame = cap.read()
    if not ret:
    break
    # 在这里可以对帧进行处理,例如添加文字或绘制图形
    out.write(frame)
    cap.release()
    out.release()
    cv2.destroyAllWindows()

  • 在这个示例中,首先打开一个输入视频文件,获取其帧率、宽度和高度等信息。然后使用cv2.VideoWriter_fourcc()函数指定视频编解码器(这里是 MJPG),创建一个cv2.VideoWriter对象来保存处理后的视频。在循环中,读取输入视频的每一帧,进行处理(这里只是简单地将原始帧写入输出视频),最后释放资源。

请注意,在实际使用中,你需要将代码中的your_image.jpgyour_video.mp4等文件路径替换为真实的文件路径。而且,在写入视频文件时,编解码器的选择要根据你的系统和需求来确定,不同的编解码器可能在不同的系统上有不同的支持情况。

相关推荐
V搜xhliang024637 分钟前
OpenClaw、AI大模型赋能数据分析与学术科研 学习
人工智能·深度学习·学习·机器学习·数据挖掘·数据分析
PHOSKEY39 分钟前
3D工业相机对焊后缺陷全检——机械手焊接系统质量控制的最后关口
人工智能
Aaron158840 分钟前
8通道测向系统演示科研套件
人工智能·算法·fpga开发·硬件工程·信息与通信·信号处理·基带工程
每天进步一点点️44 分钟前
AI芯片制造的“择优录用”:解读 APU Cluster4 的 Harvesting 机制
人工智能·soc片上系统·半导体芯片
AI医影跨模态组学1 小时前
云南省肿瘤医院李振辉&广东省人民医院等团队:免疫表型引导的可解释放射组学模型预测III–IV期d-MMR/MSI-H结直肠癌新辅助抗PD-1治疗反应
人工智能·深度学习·论文·医学·医学影像
蒸汽求职1 小时前
北美求职身份过渡:Day 1 CPT 的合规红线与安全入职指南
开发语言·人工智能·安全·pdf·github·开源协议
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【18】Hook 接口和四大抽象类
java·人工智能·spring
大任视点1 小时前
金博教育2026品牌升级:高端个性化辅导的“科技+教研”双引擎
人工智能
YuanDaima20481 小时前
二分查找基础原理与题目说明
开发语言·数据结构·人工智能·笔记·python·算法
Luca_kill1 小时前
实战指南:用 Python + NLP 搭建一套轻量级 AI 舆情监控系统
人工智能·python·机器学习·nlp·舆情监控