opencvlib库文件下载怎么写视频文件

#include &iostream&
#include &cv.h&
//#include &cvaux.h&
#include &cxcore.h&
#include &highgui.h&
// 使用标准命名空间
// 初始化进度条的位置
int g_slider_position1 = 0;
int g_slider_position2 = 0;
CvCapture* g_capture1 = NULL;
CvCapture* g_capture2 = NULL;
// 定义回调函数用于播放进度的控制
void onTrackbarSlide1( int pos1 )
cvSetCaptureProperty( g_capture1, CV_CAP_PROP_POS_FRAMES, pos1 );
void onTrackbarSlide2( int pos2 )
cvSetCaptureProperty( g_capture2, CV_CAP_PROP_POS_FRAMES, pos2 );
int main(int argc, char** argv )
// 建立播放窗口
cvNamedWindow( "Video Test 1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Video Test 2", CV_WINDOW_AUTOSIZE );
// 捕捉视频文件
char video1[] = "C:\\TestImages\\MovingCar.avi";
char video2[] = "C:\\TestImages\\MovingCar2.avi";
g_capture1 = cvCreateFileCapture( video1 );
g_capture2 = cvCreateFileCapture( video2 );
// 读取、显示视频文件的帧数
int frames1 = (int) cvGetCaptureProperty( g_capture1, CV_CAP_PROP_FRAME_COUNT );
cout && "frames1 = " && frames1 &&
// 建立进度条
if( frames1 != 0 )
cvCreateTrackbar(
"Position",
"Video Test 1",
&g_slider_position1,
onTrackbarSlide1
int frames2 = (int) cvGetCaptureProperty( g_capture2, CV_CAP_PROP_FRAME_COUNT );
cout && "frames2 = " && frames2 &&
if( frames2 != 0 )
cvCreateTrackbar(
"Position",
"Video Test 2",
&g_slider_position2,
onTrackbarSlide2
// 读取视频文件信息
double fps1 = cvGetCaptureProperty( g_capture1, CV_CAP_PROP_FPS );
double fps2 = cvGetCaptureProperty( g_capture2, CV_CAP_PROP_FPS );
cout && "fps1 = " && fps1 &&
cout && "fps1 = " && fps2 &&
CvSize size1 = cvSize(
(int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FRAME_HEIGHT));
CvSize size2 = cvSize(
(int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FRAME_HEIGHT));
// 创建 VideoWriter
char out1[] = "C:\\TestImages\\out1.avi";
char out2[] = "C:\\TestImages\\out2.avi";
//CvVideoWriter* wrVideo1 = cvCreateVideoWriter(out1, CV_FOURCC('M','J','P','G'), fps1, size1);
//CvVideoWriter* wrVideo2 = cvCreateVideoWriter(out2, CV_FOURCC('M','J','P','G'), fps2, size2);
CvVideoWriter* wrVideo1 = cvCreateVideoWriter(out1, CV_FOURCC('X','V','I','D'), fps1, size1);
CvVideoWriter* wrVideo2 = cvCreateVideoWriter(out2, CV_FOURCC('X','V','I','D'), fps2, size2);
int frs = 0;
// 开始播放并保存视频
IplImage* frame1;
IplImage* frame2;
IplImage* gray1 = cvCreateImage(size1, 8, 1);
IplImage* gray2 = cvCreateImage(size2, 8, 1);
while( frs & frames1 && frs & frames2 )
// 获取、显示源文件的帧画面
frame1 = cvQueryFrame( g_capture1 );
if( !frame1 )
cvShowImage( "Video Test 1", frame1 );
frame2 = cvQueryFrame( g_capture2 );
if( !frame2 )
cvShowImage( "Video Test 2", frame2 );
// 保存:将当前帧写入到目标视频文件
cvCvtColor(frame1 ,gray1, CV_RGB2GRAY);
cvCvtColor(frame2 ,gray2, CV_RGB2GRAY);
cvWriteFrame( wrVideo1, gray1 );
cvWriteFrame( wrVideo2, gray2 );
// 若按下 ESC 键,则退出程序
char c = cvWaitKey(33);
if( c == 27 )
// 释放内存,关闭窗口
cvReleaseCapture( &g_capture1 );
cvReleaseCapture( &g_capture2 );
cvReleaseVideoWriter( &wrVideo1 );
cvReleaseVideoWriter( &wrVideo2 );
cvDestroyWindow( "Video Test 1" );
cvDestroyWindow( "Video Test 2" );
& 著作权归作者所有
人打赏支持
码字总数 22808
0 写在前面 这篇博客主要参考资料为《OpenCV 3计算机视觉Python语言实现》(Learning OpenCV 3 Computer Vison with Python)。 因为之前用Faster R-CNN做过一个红绿灯检测的小实践,但是Git...
learning_tortosie
一、【需求描述】 目的:使用opencv接口进行人脸识别算法优化 使用场景:通过网络摄像机使用rtsp流方式读取视频流并实时监控视频中出现的人物头像进行抓取保存 1. 要求:使用C++集成opencv进...
北京知识动力信息技术有限公司
opencv libs库文件ipk编译 opencv ipk源码 利用openwrt package的编译机制仅仅需要一个Makefile即可编译opencv。 为何会如此简单神奇,下面就对Makefile详解(个人看法,欢迎指正): $vim M...
openthings
Windows 7 x64,VS2010 / MFC + OpenCV 2.4.1打开图片显示到Picture控件中。 OpenCV 2.2、OpenCV 2.3同样适用。 工具/原料 WinXP / Win7 x86 / x64 OpenCV 2.2 / 2.3 / 2.4 Visual Studio 20......
OpenCV 是开源的人像识别库,在Android上的应用我也刚刚开始摸索。 首先搞定开发环境,看能不能把测试程序给跑起来。 http://sourceforge.net/projects/opencvlibrary/files/opencv-android...
刚接触opencv,参照opencv的sample例子做了一个视频头像抓取的小代码,顺便一起学习着用,先上视频抓取及存储代码: # -- coding: cp936 --import cv2 capture=cv2.VideoCapture(0) 将captu...
按照上篇之一的进度,已经编译及安装好了opencv库及opencv_contrib扩展库。 安装好库之后,无非就还有两件事要做:1、配置环境 2、实例编译 3、移植至开发板 一、环境配置 说明:pkg-config是...
1、在官网下载opencv,链接:http://opencv.org/,下载至某盘(推荐D),下载后点击,如下: 随后弹出一个提示框,可不用管它,等一段时间,会解压出一个OpenCV文件夹,其中有如下几个文件: ...
OpenCV是一个很基于 Python的开源视觉识别工具。 在这里,我们相信地介绍了如何如何在pcDuino上安装OpenCV。 然后给出了两个例子。 第一个例子是介绍如何用OpenCV抓图像,第二个例子介绍如何...
配置的环境是: Windows 8, Visual Studio 2012 openCV_2.47 下面开始详细地讲解整个配置的过程: 步骤1: 首先需要下载openCV,这是Sourceforge的链接:http://sourceforge.net/projects/ope...
没有更多内容
加载失败,请刷新页面
rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...
在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...
1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容
Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...
1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...
她叫我小渝
1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...
wenxingjun
工作准备 o一台SQLSERVER 2005/SQLSERVER 2008服务 oSQLSERVER jdbc驱动程序 oJava开发环境eclipse + jdk1.8 ojava反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...
紅顏為君笑
《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...
转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...
php后台运行命令并管理后台运行程序 class ProcessModel{
private $resultToFile = '';
public function __construct($cl=false){......
没有更多内容
加载失败,请刷新页面
文章删除后无法恢复,确定取消删除此文章吗?
亲,自荐的博客将通过私信方式通知管理员,优秀的博客文章审核通过后将在博客推荐列表中显示
确定推荐此文章吗?
确定推荐此博主吗?
聚合全网技术文章,根据你的阅读喜好进行个性推荐
指定官方社区
深圳市奥思网络科技有限公司版权所有扫一扫体验手机阅读
OpenCV读视频文件和运动物体检测
<span type="1" blog_id="278918" userid='
623篇文章,284W+人气,1粉丝
大数据时代的微服务之路
¥51.00488人订阅
<span type="1" blog_id="278918" userid='&>&使用Opencv打开处理视频文件
使用Opencv打开处理视频文件
上传大小:577KB
文档介绍了如何使用opencv简单处理视频文件,包括原理和代码
综合评分:0
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
使用Opencv打开处理视频文件
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*投诉人姓名:
*投诉人联系方式:
*版权证明:
*详细原因:
使用Opencv打开处理视频文件使用OpenCV&读取和处理任意格式视频文件
&记得几个月前,使用OpenCV 做背景分割时使用它
很多视频都不能处理。所以投靠了
directshow,这个超级复杂的东西。虽然说已经用 directshow
写了一个几万行的商业软件,说实话对它还是想敬而远之。
今天在测一段网上的代码时,竟然都通了。我想这也可能和我在编译器里链接了directshow
的东西吧!
下面贴一段代码
int main( int argc, char** argv )
&//声明IplImage指针
&IplImage* pFrame = NULL;
&IplImage* pFrImg = NULL;
&IplImage* pBkImg = NULL;
&CvMat* pFrameMat =
&CvMat* pFrMat = NULL;
&CvMat* pBkMat = NULL;
&CvCapture* pCapture =
&int nFrmNum = 0;
&//创建窗口
&cvNamedWindow("video", 1);
&cvNamedWindow("background",1);
&cvNamedWindow("foreground",1);
&//使窗口有序排列
&cvMoveWindow("video", 30, 0);
&cvMoveWindow("background", 360, 0);
&cvMoveWindow("foreground", 690, 0);
&//if( argc & 2 )
&//&fprintf(stderr, "Usage: bkgrd
[video_file_name]\n");
&//&return -1;
&////打开摄像头
&//if (argc ==1)
&//&if( !(pCapture =
cvCaptureFromCAM(-1)))
&//&&fprintf(stderr,
"Can not open camera.\n");
&//&&return
&//打开视频文件
&//if(argc == 2)
&//if( !(pCapture =
cvCaptureFromFile(argv[1])))
&if( !(pCapture =
cvCaptureFromFile(videoname2)))
&&fprintf(stderr, "Can not open
video file %s\n", argv[1]);
&&return -2;
&//逐帧读取视频
&while(pFrame = cvQueryFrame( pCapture ))
&&nFrmNum++;
&&//如果是第一帧,需要申请内存,并初始化
&&if(nFrmNum == 1)
&&&pBkImg =
cvCreateImage(cvSize(pFrame-&width,
pFrame-&height),& IPL_DEPTH_8U,1);
&&&pFrImg =
cvCreateImage(cvSize(pFrame-&width,
pFrame-&height),& IPL_DEPTH_8U,1);
= cvCreateMat(pFrame-&height, pFrame-&width, CV_32FC1);
&&&pFrMat =
cvCreateMat(pFrame-&height, pFrame-&width, CV_32FC1);
&&&pFrameMat =
cvCreateMat(pFrame-&height, pFrame-&width,
CV_32FC1);
&&&//转化成单通道图像再处理
&&&cvCvtColor(pFrame,
pBkImg, CV_BGR2GRAY);
&&&cvCvtColor(pFrame,
pFrImg, CV_BGR2GRAY);
&&&cvConvert(pFrImg,
pFrameMat);
&&&cvConvert(pFrImg,
&&&cvConvert(pFrImg,
&&&cvCvtColor(pFrame,
pFrImg, CV_BGR2GRAY);
&&&cvConvert(pFrImg,
pFrameMat);
&&&//高斯滤波先,以平滑图像
&&&//cvSmooth(pFrameMat,
pFrameMat, CV_GAUSSIAN, 3, 0, 0);
&&&//当前帧跟背景图相减
&&&cvAbsDiff(pFrameMat,
pBkMat, pFrMat);
&&&//二值化前景图
&&&cvThreshold(pFrMat,
pFrImg, 60, 255.0, CV_THRESH_BINARY);
&&&//进行形态学滤波,去掉噪音&
&&&//cvErode(pFrImg,
pFrImg, 0, 1);
&&&//cvDilate(pFrImg,
pFrImg, 0, 1);
&&&//更新背景
&&&cvRunningAvg(pFrameMat,
pBkMat, 0.003, 0);
&&&//将背景转化为图像格式,用以显示
&&&cvConvert(pBkMat,
&&&//显示图像
&&&cvShowImage("video",
&&&cvShowImage("background",
&&&cvShowImage("foreground",
&&&//如果有按键事件,则跳出循环
&&&//此等待也为cvShowImage函数提供时间完成显示
&&&//等待时间可以根据CPU速度调整
cvWaitKey(2) &= 0 )
&//销毁窗口
&cvDestroyWindow("video");
&cvDestroyWindow("background");
&cvDestroyWindow("foreground");
&//释放图像和矩阵
&cvReleaseImage(&pFrImg);
&cvReleaseImage(&pBkImg);
&cvReleaseMat(&pFrameMat);
&cvReleaseMat(&pFrMat);
&cvReleaseMat(&pBkMat);
&cvReleaseCapture(&pCapture);
&return 0;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。请登录查看
目标每当您使用视频Feed时,您最终都可能想要以新的视频文件的形式保存您的图像处理结果。对于简单的视频输出,您可以使用设计的OpenCV内置类。如何使用OpenCV创建视频文件您可以使用OpenCV创建什么类型的视频文件如何从视频中提取给定的颜色通道作为一个简单的演示,我只需将一个输入视频文件的BGR颜色通道之一提取到一个新的视频中。您可以从其控制台行参数控制应用程序的流量:第一个参数指向要处理的视频文件第二个参数可以是以下字符之一:RG B.这将指定要提取哪些通道。最后一个参数是字符Y(是)或N(否)。如果不是,输入视频文件的编解码器将与输出相同。否则,将弹出一个窗口,并允许您选择要使用的编解码器。例如,有效的命令行将如下所示:video-write.exe video/Megamind.avi R Y
源代码您也可以在samples/cpp/tutorial_code/videoio/video-write/OpenCV源库的文件夹中找到源代码和这些视频文件,或。#include &iostream& // for standard I/O
#include &string&
// for strings
#include &opencv2/core.hpp&
// Basic OpenCV structures (cv::Mat)
#include &opencv2/videoio.hpp&
// Video write
static void help()
&& "------------------------------------------------------------------------------" && endl
&& "This program shows how to write video files."
&& "You can extract the R or G or B color channel of the input video."
&& "Usage:"
&& "./video-write &input_video_name& [ R | G | B] [Y | N]"
&& "------------------------------------------------------------------------------" && endl
int main(int argc, char *argv[])
if (argc != 4)
cout && "Not enough parameters" &&
return -1;
const string source
= argv[1];
// the source file name
const bool askOutputType = argv[3][0] ==&#39;Y&#39;;
// If false it will use the inputs codec type
VideoCapture inputVideo(source);
// Open input
if (!inputVideo.isOpened())
&& "Could not open the input video: " && source &&
return -1;
string::size_type pAt = source.find_last_of(&#39;.&#39;);
// Find extension point
const string NAME = source.substr(0, pAt) + argv[2][0] + ".avi";
// Form the new name with container
int ex = static_cast&int&(inputVideo.get(CAP_PROP_FOURCC));
// Get Codec Type- Int form
// Transform from int to char via Bitwise operators
char EXT[] = {(char)(ex & 0XFF) , (char)((ex & 0XFF00) && 8),(char)((ex & 0XFF0000) && 16),(char)((ex & 0XFF000000) && 24), 0};
Size S = Size((int) inputVideo.get(CAP_PROP_FRAME_WIDTH),
// Acquire input size
(int) inputVideo.get(CAP_PROP_FRAME_HEIGHT));
VideoWriter outputV
// Open the output
if (askOutputType)
outputVideo.open(NAME, ex=-1, inputVideo.get(CAP_PROP_FPS), S, true);
outputVideo.open(NAME, ex, inputVideo.get(CAP_PROP_FPS), S, true);
if (!outputVideo.isOpened())
&& "Could not open the output video for write: " && source &&
return -1;
cout && "Input frame resolution: Width=" && S.width && "
Height=" && S.height
&& " of nr#: " && inputVideo.get(CAP_PROP_FRAME_COUNT) &&
cout && "Input codec type: " && EXT &&
int channel = 2; // Select the channel to save
switch(argv[2][0])
case &#39;R&#39; : channel = 2;
case &#39;G&#39; : channel = 1;
case &#39;B&#39; : channel = 0;
vector&Mat&
for(;;) //Show the image captured in the window and repeat
inputVideo &&
if (src.empty())
// check if at end
split(src, spl);
// process - extract only the correct channel
for (int i =0; i & 3; ++i)
if (i != channel)
spl[i] = Mat::zeros(S, spl[0].type());
merge(spl, res);
//outputVideo.write(res); //save or
outputVideo &&
cout && "Finished writing" &&
}视频的结构首先,您应该了解视频文件的外观。每个视频文件本身就是容器。容器的类型在文件扩展名(例如avi,mov或mkv)中表示。它包含多个元素,如:视频馈送,音频馈送或其他音轨(例如字幕)。这些馈送是如何存储的由它们中的每一个使用的编解码器决定。在音频通道使用的编解码器是mp3或aac的情况下。对于视频文件,列表以某种方式更长,包括诸如XVID,DIVX,H264或LAGS(Lagarith Lossless Codec)。您可能在系统上使用的编解码器的完整列表取决于您已安装的编解码器。正如您可以看到的事情可能会让视频变得非常复杂。然而,OpenCV主要是一个计算机视觉库,而不是视频流,编解码器和写入。因此,开发人员试图让这部分尽可能的简单。由于OpenCV视频容器仅支持avi扩展,它的第一个版本。这样做的一个直接的限制是您无法保存大于2 GB的视频文件。此外,您只能创建和扩展容器内的单个视频轨道。没有音频或其他曲目编辑支持。不过,系统上存在的任何视频编解码器都可能正常工作&如果您遇到这些限制,您将需要查看更专门的视频编写库,如FFMpeg或编解码器,如HuffYUV,CorePNG和LCL。作为替代方案,使用OpenCV创建视频轨道,并使用声轨扩展,或通过使用视频操作程序(如VirtualDub或AviSynth)将其转换为其他格式。VideoWriter类这里写的内容建立在你已经读取教程的假设,你知道如何读取视频文件。要创建视频文件,您只需要创建一个类的实例。您可以通过构造函数中的参数或稍后通过函数指定其属性。无论哪种方式,参数是相同的:1.在其扩展名中包含容器类型的输出的名称。目前只支持avi。我们从输入文件构造这个,添加到要使用的通道的名称,并使用容器扩展名完成它。const string source
= argv[1];
// the source file name
string::size_type pAt = source.find_last_of(&#39;.&#39;);
// Find extension point
const string NAME = source.substr(0, pAt) + argv[2][0] + ".avi";
// Form the new name with container用于视频轨道的编解码器。现在所有的视频编解码器都有一个唯一的短名称,最多四个字符。因此,XVID,DIVX或H264的名称。这被称为四字符代码。您也可以通过使用其获取功能从输入视频中查询。因为get函数是一个通用函数,它总是返回double值。双精度值存储在64位上。四个字符是四个字节,意味着32位。这四个字符被编码在双倍的低32位中。丢弃高32位的一个简单方法是将此值转换为int:VideoCapture inputVideo(source);
// Open input
int ex = static_cast&int&(inputVideo.get(CAP_PROP_FOURCC));
// Get Codec Type- Int formOpenCV内部使用这种整数类型,并期望它作为其第二个参数。现在要从整数形式转换为字符串,我们可以使用两种方法:一个按位运算符和一个联合方法。第一个从int中提取字符看起来像(“和”操作,一些移动,并在结尾添加一个0以关闭字符串):char EXT [] = {ex&0XFF,(ex&0XFF00)&& 8,(ex&0XFF0000)&& 16,(ex&0XFF000000)&& 24,0};
你可以和工会做同样的事情:union { char c[5];} uE
// From Int to char via union
uEx.c[4]=&#39;\0&#39;;这样做的优点是转换在分配后自动完成,而对于按位运算符,您需要在更改编解码器类型时执行操作。如果事先知道编解码器有四个字符代码,可以使用CV_FOURCC宏构建整数:CV_FOURCC(&#39;P&#39;,&#39;I&#39;,&#39;M,&#39;1&#39;) // this is an MPEG1 codec from the characters to integer
如果您传递此参数减去一个而不是窗口将在运行时弹出,其中包含系统上安装的所有编解码器,并要求您选择要使用的编解码器:输出视频的每秒帧数。再次,这里我通过使用get函数来保持每秒的输入视频帧。输出视频帧的大小。这里也使用get函数保留每秒的输入视频帧大小。最后一个参数是可选的。默认情况下是真的,并且输出将是一个多彩的输出(所以写你会发送三通道图像)。要创建一个灰度级视频,在这里传递一个虚假参数。这是我在示例中如何使用它:VideoWriter outputV
Size S = Size((int) inputVideo.get(CAP_PROP_FRAME_WIDTH),
//Acquire input size
(int) inputVideo.get(CAP_PROP_FRAME_HEIGHT));
outputVideo.open(NAME , ex, inputVideo.get(CAP_PROP_FPS),S, true);之后,您可以使用函数来查看打开的操作是否成功。VideoWriter对象销毁时,视频文件会自动关闭。在成功打开对象后,您可以使用的函数按顺序发送视频的帧。或者,您可以使用其重载运算符&&:outputVideo.write(res);
outputVideo &&从BGR图像提取颜色通道意味着将其他通道的BGR值设置为零。您可以使用图像扫描操作或使用拆分和合并操作来执行此操作。您首先将通道分成不同的图像,将其他通道设置为相同尺寸和类型的零图像,最后将其合并:split(src, spl);
// process - extract only the correct channel
for( int i =0; i & 3; ++i)
if (i != channel)
spl[i] = Mat::zeros(S, spl[0].type());
merge(spl, res);把所有这一切放在一起,你会得到更高的源代码,其运行时结果将显示如下图像:
意见反馈:
联系方式:
广告等垃圾信息
不友善内容
违反法律法规的内容
不宜公开讨论的政治内容}

我要回帖

更多关于 opencv显示8位raw文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信