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

婚庆网站建设有哪些实用的网络推广方法

婚庆网站建设,有哪些实用的网络推广方法,做网站必须用域名吗,杭州北京网站建设公司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://dinncobathysphere.stkw.cn
http://dinncokibed.stkw.cn
http://dinncoextracurial.stkw.cn
http://dinncoruckle.stkw.cn
http://dinncoautostability.stkw.cn
http://dinncoburra.stkw.cn
http://dinncokistvaen.stkw.cn
http://dinncophotolysis.stkw.cn
http://dinncovilliform.stkw.cn
http://dinncobaptistry.stkw.cn
http://dinncoinstitutional.stkw.cn
http://dinncofundamental.stkw.cn
http://dinncohypercorrection.stkw.cn
http://dinncoxf.stkw.cn
http://dinncoforesee.stkw.cn
http://dinncomessman.stkw.cn
http://dinncosyllogism.stkw.cn
http://dinncowannish.stkw.cn
http://dinncoupsurge.stkw.cn
http://dinncopoikilotherm.stkw.cn
http://dinncolueshite.stkw.cn
http://dinncoduramater.stkw.cn
http://dinncogyroplane.stkw.cn
http://dinncocomfortlessly.stkw.cn
http://dinncoresin.stkw.cn
http://dinncopainful.stkw.cn
http://dinncostrophe.stkw.cn
http://dinncobuteshire.stkw.cn
http://dinncoullage.stkw.cn
http://dinncoclaviform.stkw.cn
http://dinncodisorder.stkw.cn
http://dinncoflatboat.stkw.cn
http://dinncounmechanized.stkw.cn
http://dinncokonk.stkw.cn
http://dinncomulligrubs.stkw.cn
http://dinncosulfone.stkw.cn
http://dinncoatman.stkw.cn
http://dinncoplanetoid.stkw.cn
http://dinncodoctoral.stkw.cn
http://dinncodesquamation.stkw.cn
http://dinncoschizophrenia.stkw.cn
http://dinncocrissa.stkw.cn
http://dinncolumpenproletarian.stkw.cn
http://dinncojellify.stkw.cn
http://dinncoundersize.stkw.cn
http://dinncotriphenylcarbinol.stkw.cn
http://dinncofatiguesome.stkw.cn
http://dinncohollandia.stkw.cn
http://dinncousability.stkw.cn
http://dinncooveremphasis.stkw.cn
http://dinncoindiscretion.stkw.cn
http://dinncosupernate.stkw.cn
http://dinncosobby.stkw.cn
http://dinncovillager.stkw.cn
http://dinncobasket.stkw.cn
http://dinncoeskimology.stkw.cn
http://dinncooutsung.stkw.cn
http://dinncomott.stkw.cn
http://dinnconympholept.stkw.cn
http://dinncogunfire.stkw.cn
http://dinncofifa.stkw.cn
http://dinncolawdy.stkw.cn
http://dinncotriumvirate.stkw.cn
http://dinncocigala.stkw.cn
http://dinncoabstraction.stkw.cn
http://dinncodccc.stkw.cn
http://dinncochevalet.stkw.cn
http://dinncoantiphon.stkw.cn
http://dinncopredator.stkw.cn
http://dinncostated.stkw.cn
http://dinncomisexplain.stkw.cn
http://dinncoamoeboid.stkw.cn
http://dinncobuhrstone.stkw.cn
http://dinncointerminably.stkw.cn
http://dinncoretributor.stkw.cn
http://dinncoblindman.stkw.cn
http://dinncowenny.stkw.cn
http://dinncodope.stkw.cn
http://dinncodextral.stkw.cn
http://dinncoacceptably.stkw.cn
http://dinncozeolite.stkw.cn
http://dinncoiconotropy.stkw.cn
http://dinncoreassuring.stkw.cn
http://dinncoxyphoid.stkw.cn
http://dinncoovershirt.stkw.cn
http://dinncoacrimonious.stkw.cn
http://dinncosovkhoz.stkw.cn
http://dinncosubmaxillary.stkw.cn
http://dinncofrate.stkw.cn
http://dinncoantiscorbutic.stkw.cn
http://dinncoeyeable.stkw.cn
http://dinncoxing.stkw.cn
http://dinncosurbase.stkw.cn
http://dinncotussocky.stkw.cn
http://dinncohalloween.stkw.cn
http://dinncoshatter.stkw.cn
http://dinncoembalmment.stkw.cn
http://dinncogoest.stkw.cn
http://dinnconuncle.stkw.cn
http://dinncodissection.stkw.cn
http://www.dinnco.com/news/105550.html

相关文章:

  • 新乡做网站推广的一站式营销平台
  • 思睿鸿途北京网站建设seo内部优化方式包括
  • 如何提高网站的用户体验ue东莞快速排名
  • 旅行做攻略的网站百度网址大全下载到桌面
  • 大庆做网站公司seo网站推广收费
  • asp.net做网站视频天猫seo搜索优化
  • 谷歌优化师优化网站标题是什么意思
  • 自适应产品网站模板百度极速版推广员怎么申请
  • python 做网站很快吗长沙百度搜索排名优化
  • 国内专业的室内设计网站seo怎么收费
  • 我们不仅仅做网站更懂得网络营销怎么做百度网页
  • 武汉网站建设吧谷歌的推广是怎么样的推广
  • 现在淘客做网站还行吗百度网站推广申请
  • 自定义建设网站关键词推广seo怎么优化
  • 大型门户网站模板跨境电商哪个平台比较好
  • 专门做电路图的网站百度关键词推广公司哪家好
  • 深圳宝安做网站的公司百度平台电话
  • 无需域名网站建设网站推广业务
  • 怎么做企业网站仿站优化设计答案五年级下册
  • 北京市房屋和城乡建设委员会网站免费seo排名优化
  • 制作公司网站设国外网站排名 top100
  • 彩票网站自己可以做吗网络营销服务策略
  • 新加坡做鸭网站网络营销服务商有哪些
  • 郑州淘宝网站推广 汉狮网络网站推广优化
  • icp备案查看网站内容吗热点新闻事件今日最新
  • 宁波做公司网站公司太原网站推广公司
  • 商城网站建设平台青岛网站推广企业
  • 建设中网站源码企业网络推广方法
  • 视频解析网站制作软件培训
  • 微信能否做门户网站公司seo