网络摄像头实时获取信息
转自:http://blog.csdn.net/yong_hen/article/details/42460387#quote
转自:http://blog.csdn.net/leo2007608/article/details/9885219
代码:
openCV版本:2.4.10.
平台:win7
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- void constructionPerspectiveMat(CvSize size, cv::Mat &warp_mat)
- {
- cv::Point2f srcTri[4], dstTri[4]; //二维坐标下的点,类型为浮点
- //计算矩阵仿射变换
- srcTri[0].x = 0;
- srcTri[0].y = 0;
- srcTri[1].x = size.width - 1.0f; //缩小一个像素
- srcTri[1].y = 0;
- srcTri[2].x = 0;
- srcTri[2].y = size.height - 1.0f;
- srcTri[3].x = size.width - 1.0f; //bot right
- srcTri[3].y = size.height - 1.0f;
- //改变目标图像大小
- //请注意,DstTri[i]对应SrcTri[i]。并不是说DstTri[0]就一定是LT。
- dstTri[0].x = 0 * 1.0f;
- dstTri[0].y = 0 * 1.0f;
- dstTri[1].x = srcTri[1].x * 1.0f - 50;
- dstTri[1].y = 100 * 1.0f;
- dstTri[2].x = 100 * 1.0f;
- dstTri[2].y = srcTri[2].y * 1.0f;
- dstTri[3].x = srcTri[3].x * 1.0f;
- dstTri[3].y = srcTri[3].y * 1.0f;
- warp_mat = cv::getPerspectiveTransform(srcTri, dstTri);
- }
- int main(int argc, char *argv[])
- {
- cv::VideoCapture capture(argv[1]);
- if (!capture.isOpened()) {
- //Error
- }
- cv::Mat frame, Dst, WarpMat;
- capture.read(frame);
- CvSize size;
- size.width = frame.cols;
- size.height = frame.rows;
- WarpMat.create(cvSize(3, 3), CV_32FC1);
- constructionPerspectiveMat(size, WarpMat);
- cv::namedWindow("TEST", CV_WINDOW_AUTOSIZE);
- int i = 1000;
- while (--i) {
- if (!capture.read(frame)) {
- //Error
- }
- cv::warpPerspective(frame, Dst, WarpMat, size);
- cv::imshow("TEST", Dst);
- cv::waitKey(30);
- }
- }
相关问题:
要解决问题:
opencv无法正常回放视频(原因是VideoCapture::set 函数里只有一种关键帧模式,详情参见《OpenCV 2.3.1 中关于cvCaptureProperty()定位不准的问题》)
解决方案:
上面给出的链接文章已经给出了这一问题的解决方案,但是过于笼统(我怀疑他们应该是使用的linux系统),在windows下这一编译过程可以用坑爹来形容。好吧,让我们来回顾一下这一坑爹之旅。
1 要修改的代码部分请参见OpenCV 2.3.1 中关于cvCaptureProperty()定位不准的问题 这里不再重复
2 关键的问题来了:我在windows下使用cmake安装opencv的时候,根本就没有WITH_FFMPEG这个选项,而在网上查到的解决方案都是通过修改cmake而直接搞定的,简直可谓是轻松愉快加嗨皮 ,下面给出windows下需要修改的一些内容。
2.1 先说ffmpeg的下载安装。由于一开始不是很清楚,就去ffmpeg的网站上下了最新版本编译好的程序,结果死活有函数找不到。后来google后发现,原来是因为opencv使用的是0.7x版本的ffmpeg,下载的时候大家注意一下。http://ffmpeg.zeranoe.com/builds/在这里下载,我是懒人,我下的编译完的版本。下载完,你怎么配置环境变量我就不管了,反正最后重新编译opencv时你能想起来就行。
2.2 然后我们可以打开opencv文件夹下面 CMakeLists.txt 这个文件发现
- if(UNIX)
- set(WITH_FFMPEG ON CACHE BOOL "Include FFMPEG support")
- if(NOT APPLE)
- set(WITH_UNICAP OFF CACHE BOOL "Include Unicap support (GPL)")
- set(WITH_GTK ON CACHE BOOL "Include GTK support")
- set(WITH_GSTREAMER ON CACHE BOOL "Include Gstreamer support")
- set(WITH_V4L ON CACHE BOOL "Include Video 4 Linux support")
- set(WITH_XINE OFF CACHE BOOL "Include Xine support (GPL)")
- endif()
- set(WITH_PVAPI ON CACHE BOOL "Include Prosilica GigE support")
- set(WITH_1394 ON CACHE BOOL "Include IEEE1394 support")
- endif()
通过上面代码可以看出来,只有在UNIX环境下才会有WITH_FFMPEG这个选项,好吧,往下的牛人可以直接修改这个txt了,来构造自己的cmakelist文件,可惜我对cmake不是很熟,不是很敢修改这些代码,于是乎我就采用了一个笨一些的方法,手动去修改cmake生成的项目配置文件
找到opencv_highgui这个项目,打开cap_ffmpeg.cpp文件,你会发现这么一段预编译代码
- #ifdef HAVE_FFMPEG
- #include "cap_ffmpeg_impl.hpp"
- #else
- #include "cap_ffmpeg_api.hpp"
- #endif
由于windows下的CMAKE没有预定义HAVE_FFMPEG 所以说我们需要在预编译指令里面加上HAVE_FFMPEG,位置在项目->属性-> c++ ->预处理器定义
2.3 下一步是将你的ffmpeg库的include文件夹加到highgui项目中去,不想细说了,还有就是ffmpeg中的静态链接库。这些没有什么难度。然后编译一下,ok,满屏的错误。
转到cap_ffmpeg_impl.hpp文件,大部分的错误是从这里来的
2.3.1 找不到msinttypes.h文件 上这里下载 http://code.google.com/p/msinttypes/ 然后塞进项目去就行了。
2.3.2 INT64_C, UINT64_C 没定义, 自己定义一下就可以了。在文件中加入
- #define INT64_C
- #define UINT64_C
2.3.3 如果提示av_open_input_file 找不到,恭喜你,你没好好看前面的内容,你下错ffmpeg啦~~ 要 0.7x 版本~~
2.3.4 如果报错 snprintf 这个函数找不到,我不知道这个函数在那个头文件里,我加上了<stdio>结果没找到,如果你知道的话就加上对应头文件就好了。或者你可以像我似的,使用一个把这个函数改成sprintf版本
- //snprintf(oc->filename, sizeof(oc->filename), "%s", filename);
- sprintf(oc->filename, filename, "%s");
2.3.5 我就遇到了4个要修改的地方,如果你又遇到别的错误,那只好自己慢慢修改了。
2.3.6 重新编译highgui项目,替换原有的lib,dll文件。
2.3.7 PS, 貌似还需要删除opencv_ffmpeg.dll文件,这样才能调用正确的帧跳转方法,但是删除opencv_ffmpeg后,程序就无法读取非avi类型媒体文件。 目前原因不明,有时间在慢慢鼓捣吧。
网络摄像头实时获取信息相关推荐
- [常用工具] OpenCV获取网络摄像头实时视频流
所需要硬件及软件环境: python 3/OpenCV3.4 or C++11/OpenCV3.4 1 RTSP协议 RTSP (Real Time Streaming Protocol),是一种语法 ...
- OpenCV获取网络摄像头实时视频流
1.RTSP协议 RTSP (Real Time Streaming Protocol),是一种语法和操作类似 HTTP 协议,专门用于音频和视频的应用层协议. 和 HTTP 类似,RTSP 也使用 ...
- 网络摄像头实时数据解码 yv12转换为rgb
目前在做一个有关于网络摄像头的项目.摄像头采用的是雄迈的网络摄像头.项目有一个需求就是要将实时的摄像头数据转换为图片,然后再将图片环形展开,转换为长方形的条带.目前遇到的问题就是如何将实时流转换为rg ...
- SpringBoot+Vue+虹软(ArcSoft) 的一个在线人脸识别Web系统,可通过调用笔记本摄像头或者网络摄像头实时的进行人脸识别。
写在前面 写这个demo是因为最近有个项目需要用到一个Web在线的人脸识别服务.原本以为网上这东西一抓一大把,没想到找了好久都没找到一个现成可用的,那就自己写吧. 流程 前端调取视频设备或者网络摄像头 ...
- 【OpenCV】IPCamera读取网络摄像头实时画面
软硬件平台 VS2015 OpenCV 3.2 IPCamera 沃仕达T7866WIP CGI协议 代码 #include "stdafx.h" #include <ope ...
- 海康威视NVR获取网络摄像头报警信息 C++ 实现
平台: windows 64, VS2010 先决条件:NVR已经添加了网络摄像头,NVR有固定的IP地址,NVR和运行的程序的PC在同一局域网内 查看海康的SDK中 编程引导->报警模块流程, ...
- D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)
文章目录 200123 根据 Intel Realsense D435 测试摄像头在不同曝光值下的帧生成时间(防止曝光时间过长导致fps下降)auto_exposure_priority(没成功),使 ...
- linux rtsp 获取摄像头视频流,用RTSP流式网络摄像头
我正在尝试使用连接到笔记本电脑的网络摄像头实时播放视频.我正在Linux Ubuntu中工作. 这里是服务器端和客户端的Gstreamer管道: 流媒体服务器:我试图使用gst-rtsp-server ...
- ROS系列——ONVIF Device Test Tool测试工具获取网络摄像头的rtsp
ROS系列--ONVIF Device Test Tool测试工具获取网络摄像头的rtsp 1.说明 2.ONVIF Device Test Tool工具下载及安装 3.连接网络摄像头 4.获取视频测 ...
最新文章
- 设计Optaplanner下实时规划服务的失败经历
- MAC下安装多版本JDK和切换几种方式
- 全能无线渗透测试工具,一个LAZY就搞定了
- Hadoop hdfs 从指定偏移量读取文件数据代码示例
- 【Linux系统编程】fork()函数详解
- Windows 8 快捷键收集整理
- 刷爆抖音,4万好评!这本 Python 3.6 的书又断货了...
- Oracle 12C 新特性之扩展数据类型(extended data type)
- Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法
- 非参数统计的Python实现—— Wilcoxon 符号秩检验
- 总有些中文情歌,让我莫明的感动了
- 蓝桥杯第十届c语言试题答案,[蓝桥杯][2019年第十届真题]空间跳跃 - C语言网
- 数学之美 吴军 读书笔记
- ES6基础语法(let、const、解构赋值、模板字符串、简化对象、箭头函数、扩展运算符)(一)
- windows 7不能安装谷歌浏览器怎么办?
- linux 端口耗尽,短连接以致端口耗尽
- maven archetype 自定义
- 马蜂窝陈罡:用户、内容、商业化3C矩阵,是新一代旅游市场密码
- B2B企业品牌驱动增长的底层逻辑
- UVA 12563 Jin Ge Jin Qu hao 01背包变形
热门文章
- Android之Android Studio三种方式导入外部资源 以及 报错处理
- Android之SlidingMenu使用和总结
- 供销大集长期持有_谁是下一个供销大集?(附股)
- nodejs项目_多人群聊实现其实很简单:Nodejs+WebSocket+Vue轻松实现Web IM
- 美女的床真的好难爬......
- 如何让你的碎片化时间更有价值?
- 1个月教你学会用Python实现机器学习
- python关联分析sklearn_Python3利用pandas,sklearn进行关联度分析以及预测的demo
- java小数强制转换,Java中的强制类型转换 大数转小数
- 修改正文中参考文献标注_论文写作中怎样正确插入参考文献,引用文献如何标注?...