#include"VideoSave.h"
#ifdef OPENCV
using std::cerr;
using namespace std;
cv::VideoCapture* get_capture_video_stream(const char* path) {
cv::VideoCapture* cap = NULL;
try {
cap = new cv::VideoCapture(path);
}
catch (...) {
cerr << " OpenCV exception: video-stream " << path << " can't be opened! \n";
}
return cap;
}
void Video::demo(const char* filename, int frame_skip, const char* out_filename)
{
srand(2222222);
cv::VideoCapture* cap = NULL;
char* file;
if (filename) {
printf("Video file: %s\n", filename);
cap = get_capture_video_stream(filename);
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_splitpath(filename, drive, dir, fname, ext);
printf("Drive:%s\n file name: %s\n file type: %s\n", drive, fname, ext);
file = fname;
}
if (!cap) {
#ifdef WIN32
printf("Check that you have copied file opencv_ffmpeg340_64.dll to the same directory where is darknet.exe \n");
#endif
printf("Couldn't connect to webcam.\n");
exit(EXIT_FAILURE);
}
//获取整个帧数
long totalFrameNumber = cap->get(cv::CAP_PROP_FRAME_COUNT);
cout << "Total frames:" << totalFrameNumber << "帧" << endl;
//设置开始帧()
long StartFrame = 1;
cap->set(cv::CAP_PROP_POS_FRAMES, StartFrame); //从设定的帧开始读
//cap->set(cv::CAP_PROP_POS_MSEC, double(0)); //从设定的时间开始读
cout << "StartFrame:" << StartFrame << endl;
//设置结束帧
int StopFrame = 10;
if (StopFrame < StartFrame)
{
cout << "结束帧小于开始帧,程序错误,即将退出!" << endl;
exit(EXIT_FAILURE);
}
else
{
cout << "结束帧为:第" << StopFrame << "帧" << endl;
}
//获取帧率
double rate = cap->get(cv::CAP_PROP_FPS);
cout << "帧率为:" << rate << endl;
//定义一个用来控制读取视频循环结束的变量
bool stop = false;
//实例化帧
cv::Mat frame;
//显示每一帧的窗口
//namedWindow( "Extractedframe" );
//两帧间的间隔时间:
//int delay = 1000/rate;
int delay = rate;
//利用while循环读取帧
//currentFrame是在循环体中控制读取到指定的帧后循环结束的变量
long currentFrame = StartFrame;
while (!stop)
{
//读取下一帧
if (!cap->read(frame))
{
cout << "读取视频失败" << endl;
exit(EXIT_FAILURE);
}
//cout << "正在读取第" << currentFrame << "帧" << endl;
cv::imshow("Extractedframe", frame);
//此处为跳帧操作
if (currentFrame)
//此处为帧数间隔,修改这里就可以了 隔50帧保存一帧就是 currentframe%50 == 0
{
cout << "正在写第" << currentFrame << "帧" << endl;
stringstream str;
str << filename << "_" << currentFrame << ".png"; /*图片存储位置*/
//str << file << "_" << currentFrame << ".png";
cout << str.str() << endl;
cv::imwrite(str.str(), frame);
}
waitKey(intdelay=0)当delay≤ 0时会永远等待;当delay>0时会等待delay毫秒
当时间结束前没有按键按下时,返回值为-1;否则返回按键
//int c = cv::waitKey(0);
按下ESC或者到达指定的结束帧后退出读取视频
//if ((char)c == 27 || currentFrame > StopFrame)
//{
// stop = true;
//}
按下按键后会停留在当前帧,等待下一次按键
//if (c >= 0)
//{
// cv::waitKey(0);
//}
if (currentFrame > StopFrame)
{
stop = true;
}
currentFrame++;
}
//关闭视频文件
cap->release();
cv::waitKey(0);
cv::destroyAllWindows();
}
#else
void demo(char* cfgfile, char* weightfile, float thresh, float hier_thresh, int cam_index, const char* filename, char** names, int classes, int avgframes,
int frame_skip, char* prefix, char* out_filename, int mjpeg_port, int dontdraw_bbox, int json_port, int dont_show, int ext_output, int letter_box_in, int time_limit_sec, char* http_post_host,
int benchmark, int benchmark_layers)
{
fprintf(stderr, "Demo needs OpenCV for webcam images.\n");
}
#endif
以下kafka集群的节点分别是node01,node02,node03习题一:在kafka集群中创建student主题 副本为2个,分区为3个 生产者设置: 设置key的序列化为 org.apache.kafka.common.serialization. StringSerializer 设置value的序列化为org.apache.kafka.common.serializatio...
CCF会议会被SCI收录。中国计算机学会(CCF)成立于1962年,全国一级学会,独立社团法人,中国科学技术协会成员。CCF是中国计算机及相关领域的学术团体,宗旨是为本领域专业人士的学术和职业发展提供服务;推动学术进步和技术成果的应用;进行学术评价,引领学术方向;促进技术和产业应用一线的交流和互动;对在学术和技术方面有突出成就的个人、企业和单位给予认可和表彰。秉承会员构成、会员治理和服务会员的理念...
一:关于异常JAVA异常是在java程序运行的时候遇到非正常的情况而创建的对,它封装了异常信息。java异常的根类为java.lang.Throwable,整个类有两个直接子类java.lang.Error和java.lang.Exception。Error是程序本身无法恢复的严重错误,一般是虚拟机或者系统运行出现错误,和程序无关。Exception则表示可以被程序捕获并处理的异常错误。JV...
数组shift方法 JavaScript shift()方法 (JavaScript shift() method)shift() method is used to remove the first element of an array and returns the deleted element. shift()方法用于删除数组的第一个元素,并返回删除的元素。 It changes ...
CFIIE类是MFC的文件类的基类,它直接提供无缓冲的二进制磁盘I/O设备,并且通过它的派生类可以提供对text文件和内存文件的存取。CFILE与CArchive类一起提供对MFC序列化的支持。CFILE类和它的派生类之间的等级关系,允许你的程序通过多态的CFILE界面对所有文件类进行操作。比如内存文件,或者磁盘文件以及类似的。CFILE和它的派生类用于执行一般的磁盘I/O操作。而OFSTRE...
课程视频链接:https://www.bilibili.com/video/av29600072?p=6内容线性混合操作理论知识相关 API (addWeighted)完整代码1. 线性混合操作理论知识g(x) = (1-α) * f_0(x) + α * f_1(x)其中 f0(x) 表示一幅图像,f1(x) 表示另一幅图像, α 表示权重,取值范围在 0~1 之间,所以最后...
持续集成1.什么是持续集成:Continuous integration (CI)持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。2.没有持续集成的...
为什么80%的码农都做不了架构师?>>> ...
基于TCP的socket编程服务器端程序:1、创建socket2、将套接字绑定到一个本地地址和端口上bind3、将套接字设为监听模式,准备接受客户请求listen4、等待客户请求到来;当请求到来后,结合搜此次连接的套接字accept5、用返回的套接字和客户端进行通信send/recv6、返回,等待另一客户请求。7、关闭套接字。源码:#include <Win...
bc命令是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。语法bc(选项)(参数)选项-i:强制进入交互式模式;-l:定义使用的标准数学库;-w:对POSIX bc的扩展给出警告信息;-q:不打印正常的GNU bc环境信息;-v:显示指令版本信息;-h:显示指令的帮助信息...
计算a点和b点的角度(偏行角:逆时针) /** * 计算a点和b点的角度(偏行角) * @param lng_a a点经度 * @param lat_a a点维度 * @param lng_b b点经度 * @param lat_b b点维度 * @returns 角度 */function courseAngle(lng_a, lat_a, lng_b, lat_b)...
build curl for androidexport CURL_BUILD_DIR=/xxxx/curl-7_53_1/4androidexport CC=arm-linux-androideabi-gccexport CXX=arm-linux-androideabi-g++export LINK=$CXXexport LD=arm-linux-androideabi-ldexport