opencv读写文件操作

ops/2024/11/26 10:19:00/
  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'):breakcap.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等文件路径替换为真实的文件路径。而且,在写入视频文件时,编解码器的选择要根据你的系统和需求来确定,不同的编解码器可能在不同的系统上有不同的支持情况。


http://www.ppmy.cn/ops/136806.html

相关文章

HTML实现 扫雷游戏

前言: 游戏起源与发展 扫雷游戏的雏形可追溯到 1973 年的 “方块(cube)” 游戏,后经改编出现了 “rlogic” 游戏,玩家需为指挥中心探出安全路线避开地雷。在此基础上,开发者汤姆・安德森编写出了扫雷游戏的…

Python学习——猜拳小游戏

import random player int(input(“请输入:剪刀 0,石头 1,布2”)) computer random.randint(0,2)# print(“玩家输入的是%d,电脑输入的是%d” %(player,computer)) 用于测试 if (player 0) and (computer 0) or (player 1) a…

自由学习记录(23)

Lua的学习 table.concat(tb,";") 如果表里带表,则不能拼接,表里带nil也不能,都会报错 true和false也不可以,数字和字符串可以 if要和一个end配对,所以 if a>b then return true end end 两个end …

前端工程化18-邂逅Promise(待更新)

6、邂逅Promise 6.1、函数对象与实例对象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>准备_函数对象与实例对象</title> </head> <body><script>/* 函数对象、实例对象…

Android 性能优化:内存优化(理论篇)

内存作为App程序运行最重要的资源之一&#xff0c;需要运行过程中做到合理的资源分配与回收&#xff0c;不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&#xff0c;重则导致用户应用程序发生 OOM&#xff08;out of memory&#xff09;崩溃。喜马直播随着近些年的业…

【手写一个spring】spring源码的简单实现--BeanPostProcessor(实现AOP)以及JDK动态代理/CGLIB动态代理

文章目录 BeanPostProcessor概念BeanPostProcessor接口中的两个方法BeanPostProcessor的实例化与注册BeanPostProcessor的执行时机实现AOP动态代理技术JDK动态代理&#xff1a;CGLIB动态代理&#xff1a; JDK动态代理和CGLIB动态代理的区别JDK动态代理CGLIB动态代理使用场景性能…

一个全面的Vue 3组件通信演示展示

✍️ 记录 一、Vue2 中组件通信方式 props: 实现父子组件、子父组件、甚至兄弟组件通信自定义事件: 可以实现子父组件通信全局事件总线$bus: 可以实现任意组件通信pubsub: 发布订阅模式实现任意组件通信vuex: 集中状态管理容器&#xff0c;实现任意组件通信ref: 父组件获取子…

【C语言】野指针问题详解及防范方法

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;什么是野指针&#xff1f;&#x1f4af;未初始化的指针代码示例问题分析解决方法 &#x1f4af;指针越界访问代码示例问题分析解决方法 &#x1f4af;指向已释放内存的…