当前位置: 首页 > news >正文

婚庆网站建设百度seo点击工具

婚庆网站建设,百度seo点击工具,厦门公司网站开发,鲜花店网站源码opencv 之 视频类 VideoCapture、VideoWriter 详细介绍 VideoCapture 用于打开视频文件或者摄像头及设置相关属性VideoWriter 用于保存视频文件及设置相关属性 1. VideoCapture cv::VideoCapture 是 OpenCV 中用于从视频文件、图像序列或摄像头捕获视频的类。它是 OpenCV 视频…

opencv 之 视频类 VideoCapture、VideoWriter 详细介绍

  • VideoCapture 用于打开视频文件或者摄像头及设置相关属性
  • VideoWriter 用于保存视频文件及设置相关属性

1. VideoCapture

  • cv::VideoCapture 是 OpenCV 中用于从视频文件、图像序列或摄像头捕获视频的类。它是 OpenCV 视频处理模块的核心类之一。

  • cv::VideoCapture 提供了以下主要功能:

    • 从视频文件(如 .avi, .mp4 等)读取帧
    • 摄像头捕获实时视频流
    • 从图像序列(一系列编号图像)读取帧
    • 获取和设置视频属性(如帧率、分辨率等)
  • 构造函数

// 默认构造函数
cv::VideoCapture();// 从文件或设备构造
cv::VideoCapture(const String& filename, int apiPreference = CAP_ANY);
cv::VideoCapture(int index, int apiPreference = CAP_ANY);参数说明:filename:视频文件名或图像序列模式(如 "img_%02d.jpg")
index:摄像头索引(0 通常是默认摄像头)
apiPreference:指定使用的后端 API(如 CAP_FFMPEG, CAP_V4L2 等)
  • 常用方法
//打开视频源
bool open(const String& filename, int apiPreference = CAP_ANY);
bool open(int index, int apiPreference = CAP_ANY);//检查是否成功打开
bool isOpened() const;
//读取帧
// 读取下一帧到 image
bool read(OutputArray image);// 等同于 read(),但返回是否成功
VideoCapture& operator >> (Mat& image);// 抓取下一帧(不解码)
bool grab();// 解码并返回抓取的帧
bool retrieve(OutputArray image, int flag = 0);
//获取/设置属性
double get(int propId) const;
bool set(int propId, double value);//常用属性 ID(在 cv::VideoCaptureProperties 中定义):
CAP_PROP_FRAME_WIDTH - 帧宽度
CAP_PROP_FRAME_HEIGHT - 帧高度
CAP_PROP_FPS - 帧率
CAP_PROP_FRAME_COUNT - 总帧数(视频文件)
CAP_PROP_POS_FRAMES - 当前帧位置
CAP_PROP_POS_MSEC - 当前时间位置(毫秒)
//释放资源
void release();

使用示例

//示例1:从摄像头捕获
#include <opencv2/opencv.hpp>int main() {cv::VideoCapture cap(0); // 打开默认摄像头if (!cap.isOpened()) {std::cerr << "无法打开摄像头" << std::endl;return -1;}cv::Mat frame;while (true) {cap >> frame; // 或 cap.read(frame);if (frame.empty()) break;cv::imshow("摄像头", frame);if (cv::waitKey(30) >= 0) break;}cap.release();return 0;
}
//示例2:从视频文件读取
#include <opencv2/opencv.hpp>int main() {cv::VideoCapture cap("video.mp4");if (!cap.isOpened()) {std::cerr << "无法打开视频文件" << std::endl;return -1;}// 获取视频属性double fps = cap.get(cv::CAP_PROP_FPS);int width = cap.get(cv::CAP_PROP_FRAME_WIDTH);int height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);std::cout << "视频信息: " << width << "x" << height << ", " << fps << " FPS" << std::endl;cv::Mat frame;while (cap.read(frame)) {cv::imshow("视频播放", frame);if (cv::waitKey(1000/fps) >= 0) break; // 按正确帧率显示}cap.release();return 0;
}
//示例3:从图像序列读取
cv::VideoCapture cap("img_%02d.jpg"); // 读取 img_00.jpg, img_01.jpg, ...
注意事项:
- 使用后务必调用 release() 释放资源
- 检查 isOpened() 确保视频源已正确打开
- 对于大视频文件,考虑使用 grab() + retrieve() 以提高性能
- 不同视频格式和编解码器的支持取决于安装的 OpenCV 版本和编解码器
- 在多线程环境中使用时需要注意线程安全
  • 高级用法
//使用特定后端 API
cv::VideoCapture cap("video.mp4", cv::CAP_FFMPEG);//设置缓冲区大小
cap.set(cv::CAP_PROP_BUFFERSIZE, 1); // 减少延迟//多摄像头同步
cv::VideoCapture cap1(0), cap2(1);
cap1.grab(); cap2.grab(); // 同步抓取
cv::Mat frame1, frame2;
cap1.retrieve(frame1);
cap2.retrieve(frame2);

2. cv::VideoWriter

  • cv::VideoWriter 是 OpenCV 中用于写入视频文件或图像序列的类,与 cv::VideoCapture 相对应,用于视频的保存和输出。

  • cv::VideoWriter 提供以下主要功能:

    • 将帧序列写入视频文件
    • 支持多种视频格式(如 .avi, .mp4 等)
    • 可设置视频编码器、帧率、分辨率等参数
    • 支持多通道图像写入
  • 构造函数

// 默认构造函数
cv::VideoWriter();// 带参数的构造函数
cv::VideoWriter(const String& filename, int fourcc, double fps, Size frameSize, bool isColor = true);参数说明:
filename:输出视频文件名
fourcc:四字符编码的编解码器(如 "MJPG", "X264")
fps:输出视频的帧率
frameSize:视频帧的大小(宽度和高度)
isColor:是否为彩色视频(默认为 true
  • 常用方法
//打开视频写入器
bool open(const String& filename, int fourcc, double fps, Size frameSize, bool isColor = true);//检查是否成功打开
bool isOpened() const;
  • 写入帧
// 写入一帧
void write(InputArray image);// 等同于 write()
VideoWriter& operator << (const Mat& image);//释放资源
void release();
  • 四字符编码(FourCC)
FourCC 是视频编解码器的四字符代码,常见的有:"MJPG" - Motion-JPEG
"XVID" - XVID MPEG-4
"X264" - H.264/AVC
"MP4V" - MPEG-4
"AVC1" - H.264
"H264" - H.264
"VP80" - VP8
//可以使用 cv::VideoWriter::fourcc() 函数生成 FourCC 代码:
int fourcc = cv::VideoWriter::fourcc('M', 'J', 'P', 'G');

使用示例

示例1:创建并写入视频文件
#include <opencv2/opencv.hpp>int main() {// 创建一个 VideoWriter 对象cv::VideoWriter writer;// 设置视频参数int fourcc = cv::VideoWriter::fourcc('M', 'J', 'P', 'G'); // 编解码器double fps = 30.0; // 帧率cv::Size frameSize(640, 480); // 帧大小// 打开视频文件writer.open("output.avi", fourcc, fps, frameSize, true);if (!writer.isOpened()) {std::cerr << "无法创建视频文件" << std::endl;return -1;}// 创建一些示例帧(这里用彩色渐变作为示例)for (int i = 0; i < 300; i++) { // 写入300帧cv::Mat frame(frameSize, CV_8UC3);// 创建渐变效果for (int y = 0; y < frame.rows; y++) {for (int x = 0; x < frame.cols; x++) {frame.at<cv::Vec3b>(y, x) = cv::Vec3b((x + i) % 256, // B(y + i) % 256, // G(x + y + i) % 256 // R);}}writer.write(frame); // 写入帧// 或者使用 writer << frame;cv::imshow("正在写入的视频", frame);if (cv::waitKey(30) >= 0) break;}writer.release(); // 释放资源cv::destroyAllWindows();return 0;
}
示例2:从摄像头捕获并保存视频
#include <opencv2/opencv.hpp>int main() {// 打开摄像头cv::VideoCapture cap(0);if (!cap.isOpened()) {std::cerr << "无法打开摄像头" << std::endl;return -1;}// 获取摄像头参数int frame_width = cap.get(cv::CAP_PROP_FRAME_WIDTH);int frame_height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);double fps = cap.get(cv::CAP_PROP_FPS);if (fps <= 0) fps = 30; // 如果获取不到帧率,使用默认值// 创建 VideoWriterint fourcc = cv::VideoWriter::fourcc('X', 'V', 'I', 'D'); // XVID 编码cv::VideoWriter writer("camera_output.avi", fourcc, fps, cv::Size(frame_width, frame_height));if (!writer.isOpened()) {std::cerr << "无法创建视频文件" << std::endl;return -1;}cv::Mat frame;while (true) {cap >> frame; // 从摄像头捕获一帧if (frame.empty()) break;writer.write(frame); // 写入视频文件cv::imshow("摄像头捕获", frame);if (cv::waitKey(30) >= 0) break; // 按任意键退出}cap.release();writer.release();cv::destroyAllWindows();return 0;
}
示例3:使用不同编解码器
// 使用 H.264 编码
int fourcc = cv::VideoWriter::fourcc('H', '2', '6', '4');
cv::VideoWriter writer("h264_output.mp4", fourcc, 30.0, cv::Size(640, 480));// 使用 VP8 编码
int fourcc = cv::VideoWriter::fourcc('V', 'P', '8', '0');
cv::VideoWriter writer("vp8_output.webm", fourcc, 30.0, cv::Size(640, 480));
  • 注意事项

    • 1.​​编解码器支持​​:不是所有编解码器在所有系统上都可用,取决于安装的 OpenCV 版本和编解码器库
    • 2.文件扩展名​​:文件扩展名应与编解码器匹配(如 .avi 用于 MJPG,.mp4 用于 H.264)
    • ​​3.帧大小一致性​​:所有写入的帧必须与构造函数中指定的大小相同
    • ​​4.颜色格式​​:如果构造函数中指定 isColor=true,则必须写入 3 通道 (BGR) 图像
    • ​​5.性能考虑​​:视频编码可能很耗资源,高分辨率/高帧率视频可能需要优化
    • ​​6.释放资源​​:务必调用 release() 以确保视频文件正确关闭
  • 高级用法

检查编解码器支持
// 检查特定编解码器是否可用
if (!writer.isOpened()) {std::cerr << "编解码器不可用,尝试其他编解码器" << std::endl;fourcc = cv::VideoWriter::fourcc('M', 'J', 'P', 'G');writer.open("output.avi", fourcc, fps, frameSize);
}
写入灰度视频
// 创建灰度视频写入器
cv::VideoWriter writer("gray_output.avi", fourcc, fps, frameSize, false);// 写入灰度帧
cv::Mat grayFrame;
cv::cvtColor(colorFrame, grayFrame, cv::COLOR_BGR2GRAY);
writer.write(grayFrame);
设置视频质量
// 对于某些编解码器,可以设置质量参数
writer.set(cv::VIDEOWRITER_PROP_QUALITY, 95); // 质量百分比 (0-100)
多线程视频写入
// 在一个线程捕获,另一个线程写入
std::thread writerThread([&]() {while (!frames.empty() || capturing) {if (!frames.empty()) {writer.write(frames.front());frames.pop();}}
});

cv::VideoWriter 是 OpenCV 视频输出的核心类,熟练掌握它可以实现各种视频录制和保存功能。根据实际需求选择合适的编解码器和参数,可以优化视频质量和文件大小。


文章转载自:
http://zoon.hmxb.cn
http://pocketable.hmxb.cn
http://alchemically.hmxb.cn
http://dilemma.hmxb.cn
http://mesothermal.hmxb.cn
http://does.hmxb.cn
http://jacob.hmxb.cn
http://dispatchbox.hmxb.cn
http://aggregate.hmxb.cn
http://detonation.hmxb.cn
http://andromache.hmxb.cn
http://stagy.hmxb.cn
http://leotard.hmxb.cn
http://athens.hmxb.cn
http://carpale.hmxb.cn
http://drowse.hmxb.cn
http://sauciness.hmxb.cn
http://choctaw.hmxb.cn
http://discriminatory.hmxb.cn
http://royalistic.hmxb.cn
http://paraprotein.hmxb.cn
http://calorize.hmxb.cn
http://hopple.hmxb.cn
http://tintometer.hmxb.cn
http://stallage.hmxb.cn
http://coffee.hmxb.cn
http://misbeliever.hmxb.cn
http://inosite.hmxb.cn
http://cyclostyle.hmxb.cn
http://gulp.hmxb.cn
http://coliseum.hmxb.cn
http://clutter.hmxb.cn
http://laniate.hmxb.cn
http://dudgeon.hmxb.cn
http://reperforator.hmxb.cn
http://danaides.hmxb.cn
http://anilide.hmxb.cn
http://soapery.hmxb.cn
http://pantelegraph.hmxb.cn
http://vicereine.hmxb.cn
http://stuff.hmxb.cn
http://chemoreceptive.hmxb.cn
http://fusobacterium.hmxb.cn
http://electrofishing.hmxb.cn
http://proctorial.hmxb.cn
http://batholithic.hmxb.cn
http://proclimax.hmxb.cn
http://filtrability.hmxb.cn
http://suave.hmxb.cn
http://seldom.hmxb.cn
http://ogham.hmxb.cn
http://corrugated.hmxb.cn
http://zaqaziq.hmxb.cn
http://supernova.hmxb.cn
http://cagmag.hmxb.cn
http://newborn.hmxb.cn
http://foremilk.hmxb.cn
http://hyracoid.hmxb.cn
http://bluejeans.hmxb.cn
http://playroom.hmxb.cn
http://cathecticize.hmxb.cn
http://opponency.hmxb.cn
http://tapioca.hmxb.cn
http://dewfall.hmxb.cn
http://hippocras.hmxb.cn
http://clouted.hmxb.cn
http://rotarian.hmxb.cn
http://addlebrained.hmxb.cn
http://undam.hmxb.cn
http://unanimously.hmxb.cn
http://lemonade.hmxb.cn
http://ptilopod.hmxb.cn
http://filmstrip.hmxb.cn
http://nubble.hmxb.cn
http://ascolichen.hmxb.cn
http://endomixis.hmxb.cn
http://hymnographer.hmxb.cn
http://sumption.hmxb.cn
http://verdant.hmxb.cn
http://acquittance.hmxb.cn
http://zealous.hmxb.cn
http://housebound.hmxb.cn
http://ducat.hmxb.cn
http://topazolite.hmxb.cn
http://responsory.hmxb.cn
http://bumblebee.hmxb.cn
http://favus.hmxb.cn
http://ostpreussen.hmxb.cn
http://raucity.hmxb.cn
http://labouring.hmxb.cn
http://photocoagulating.hmxb.cn
http://lactoflavin.hmxb.cn
http://chalcid.hmxb.cn
http://brussels.hmxb.cn
http://bootless.hmxb.cn
http://extraofficial.hmxb.cn
http://domeliner.hmxb.cn
http://bywoner.hmxb.cn
http://anba.hmxb.cn
http://zonian.hmxb.cn
http://www.dt0577.cn/news/112840.html

相关文章:

  • 怎么连接网站的虚拟主机如何搭建一个自己的网站
  • 黑龙江恒泰建设集团网站上海网络营销seo
  • 建设vip网站相关视频seo技术培训茂名
  • 河南哪里网站建设公司最近疫情最新消息
  • 做网销的网站百度电话号码查询平台
  • 自己做的网站只能打开一个链接百度安装到桌面
  • 金湖建设局网站营销模式都有哪些
  • wordpress用户二级域名什么叫seo网络推广
  • 直播一级a做爰片免费网站品牌营销策划有限公司
  • 南宁网站建设公司怎么接单磁力宅
  • 织梦生成网站地图充电宝seo关键词优化
  • 南宁百度seo网站优化购物网站页面设计
  • asp建设的网站360网址大全
  • 网站设计的宽度百度广告优化师
  • 湖北民族建设集团网站首页seo网站推广与优化方案
  • 网站后台上图片后网页显示不正确seo手机端优化
  • 青岛做网站建设百度客服24小时电话
  • 西安免费做网站多少钱怎么给客户推广自己的产品
  • 网站规划与建设与安全管理百度大搜推广和百度竞价
  • 亚马逊电商平台入口可靠的网站优化
  • 网站建设需要的一些技术网络营销与直播电商怎么样
  • wordpress 建站 知乎网站seo推广计划
  • 企业做网站优劣百度助手app下载
  • 网站设计建设公司怎么做推广普通话的宣传标语
  • 武汉微网站长春网站建设公司
  • 北京网站建设需要多少钱全网推广的方式
  • 贵州城乡建设厅城乡建设网站泉州网站关键词排名
  • 泰安医院网站建设小吃培训去哪里学最好
  • 石家庄做网站设计网站推广策略有哪些
  • 一起做网店官方网站seo优化推广流程