转自:http://blog.csdn.net/yong_hen/article/details/42460387#quote

转自:http://blog.csdn.net/leo2007608/article/details/9885219

代码:

openCV版本:2.4.10.

平台:win7

[cpp] view plaincopy
  1. #include <opencv2/core/core.hpp>
  2. #include <opencv2/highgui/highgui.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. void constructionPerspectiveMat(CvSize size, cv::Mat &warp_mat)
  5. {
  6. cv::Point2f srcTri[4], dstTri[4]; //二维坐标下的点,类型为浮点
  7. //计算矩阵仿射变换
  8. srcTri[0].x = 0;
  9. srcTri[0].y = 0;
  10. srcTri[1].x = size.width - 1.0f;  //缩小一个像素
  11. srcTri[1].y = 0;
  12. srcTri[2].x = 0;
  13. srcTri[2].y = size.height - 1.0f;
  14. srcTri[3].x = size.width - 1.0f;  //bot right
  15. srcTri[3].y = size.height - 1.0f;
  16. //改变目标图像大小
  17. //请注意,DstTri[i]对应SrcTri[i]。并不是说DstTri[0]就一定是LT。
  18. dstTri[0].x = 0 * 1.0f;
  19. dstTri[0].y = 0 * 1.0f;
  20. dstTri[1].x = srcTri[1].x * 1.0f - 50;
  21. dstTri[1].y = 100 * 1.0f;
  22. dstTri[2].x = 100 * 1.0f;
  23. dstTri[2].y = srcTri[2].y * 1.0f;
  24. dstTri[3].x = srcTri[3].x * 1.0f;
  25. dstTri[3].y = srcTri[3].y * 1.0f;
  26. warp_mat = cv::getPerspectiveTransform(srcTri, dstTri);
  27. }
  28. int main(int argc, char *argv[])
  29. {
  30. cv::VideoCapture capture(argv[1]);
  31. if (!capture.isOpened()) {
  32. //Error
  33. }
  34. cv::Mat frame, Dst, WarpMat;
  35. capture.read(frame);
  36. CvSize size;
  37. size.width = frame.cols;
  38. size.height = frame.rows;
  39. WarpMat.create(cvSize(3, 3), CV_32FC1);
  40. constructionPerspectiveMat(size, WarpMat);
  41. cv::namedWindow("TEST", CV_WINDOW_AUTOSIZE);
  42. int i = 1000;
  43. while (--i) {
  44. if (!capture.read(frame)) {
  45. //Error
  46. }
  47. cv::warpPerspective(frame, Dst, WarpMat, size);
  48. cv::imshow("TEST", Dst);
  49. cv::waitKey(30);
  50. }
  51. }

相关问题:

要解决问题:

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 这个文件发现

[html] view plaincopy
  1. if(UNIX)
  2. set(WITH_FFMPEG ON CACHE BOOL "Include FFMPEG support")
  3. if(NOT APPLE)
  4. set(WITH_UNICAP OFF CACHE BOOL "Include Unicap support (GPL)")
  5. set(WITH_GTK ON CACHE BOOL "Include GTK support")
  6. set(WITH_GSTREAMER ON CACHE BOOL "Include Gstreamer support")
  7. set(WITH_V4L ON CACHE BOOL "Include Video 4 Linux support")
  8. set(WITH_XINE OFF CACHE BOOL "Include Xine support (GPL)")
  9. endif()
  10. set(WITH_PVAPI ON CACHE BOOL "Include Prosilica GigE support")
  11. set(WITH_1394 ON CACHE BOOL "Include IEEE1394 support")
  12. endif()

通过上面代码可以看出来,只有在UNIX环境下才会有WITH_FFMPEG这个选项,好吧,往下的牛人可以直接修改这个txt了,来构造自己的cmakelist文件,可惜我对cmake不是很熟,不是很敢修改这些代码,于是乎我就采用了一个笨一些的方法,手动去修改cmake生成的项目配置文件

找到opencv_highgui这个项目,打开cap_ffmpeg.cpp文件,你会发现这么一段预编译代码

[html] view plaincopy
  1. #ifdef HAVE_FFMPEG
  2. #include "cap_ffmpeg_impl.hpp"
  3. #else
  4. #include "cap_ffmpeg_api.hpp"
  5. #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 没定义, 自己定义一下就可以了。在文件中加入

[html] view plaincopy
  1. #define INT64_C
  2. #define UINT64_C

2.3.3 如果提示av_open_input_file 找不到,恭喜你,你没好好看前面的内容,你下错ffmpeg啦~~ 要 0.7x 版本~~

2.3.4 如果报错 snprintf 这个函数找不到,我不知道这个函数在那个头文件里,我加上了<stdio>结果没找到,如果你知道的话就加上对应头文件就好了。或者你可以像我似的,使用一个把这个函数改成sprintf版本

[html] view plaincopy
  1. //snprintf(oc->filename, sizeof(oc->filename), "%s", filename);
  2. 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类型媒体文件。 目前原因不明,有时间在慢慢鼓捣吧。

网络摄像头实时获取信息相关推荐

  1. [常用工具] OpenCV获取网络摄像头实时视频流

    所需要硬件及软件环境: python 3/OpenCV3.4 or C++11/OpenCV3.4 1 RTSP协议 RTSP (Real Time Streaming Protocol),是一种语法 ...

  2. OpenCV获取网络摄像头实时视频流

    1.RTSP协议 RTSP (Real Time Streaming Protocol),是一种语法和操作类似 HTTP 协议,专门用于音频和视频的应用层协议. 和 HTTP 类似,RTSP 也使用 ...

  3. 网络摄像头实时数据解码 yv12转换为rgb

    目前在做一个有关于网络摄像头的项目.摄像头采用的是雄迈的网络摄像头.项目有一个需求就是要将实时的摄像头数据转换为图片,然后再将图片环形展开,转换为长方形的条带.目前遇到的问题就是如何将实时流转换为rg ...

  4. SpringBoot+Vue+虹软(ArcSoft) 的一个在线人脸识别Web系统,可通过调用笔记本摄像头或者网络摄像头实时的进行人脸识别。

    写在前面 写这个demo是因为最近有个项目需要用到一个Web在线的人脸识别服务.原本以为网上这东西一抓一大把,没想到找了好久都没找到一个现成可用的,那就自己写吧. 流程 前端调取视频设备或者网络摄像头 ...

  5. 【OpenCV】IPCamera读取网络摄像头实时画面

    软硬件平台 VS2015 OpenCV 3.2 IPCamera 沃仕达T7866WIP CGI协议 代码 #include "stdafx.h" #include <ope ...

  6. 海康威视NVR获取网络摄像头报警信息 C++ 实现

    平台: windows 64, VS2010 先决条件:NVR已经添加了网络摄像头,NVR有固定的IP地址,NVR和运行的程序的PC在同一局域网内 查看海康的SDK中 编程引导->报警模块流程, ...

  7. D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)

    文章目录 200123 根据 Intel Realsense D435 测试摄像头在不同曝光值下的帧生成时间(防止曝光时间过长导致fps下降)auto_exposure_priority(没成功),使 ...

  8. linux rtsp 获取摄像头视频流,用RTSP流式网络摄像头

    我正在尝试使用连接到笔记本电脑的网络摄像头实时播放视频.我正在Linux Ubuntu中工作. 这里是服务器端和客户端的Gstreamer管道: 流媒体服务器:我试图使用gst-rtsp-server ...

  9. ROS系列——ONVIF Device Test Tool测试工具获取网络摄像头的rtsp

    ROS系列--ONVIF Device Test Tool测试工具获取网络摄像头的rtsp 1.说明 2.ONVIF Device Test Tool工具下载及安装 3.连接网络摄像头 4.获取视频测 ...

最新文章

  1. 设计Optaplanner下实时规划服务的失败经历
  2. MAC下安装多版本JDK和切换几种方式
  3. 全能无线渗透测试工具,一个LAZY就搞定了
  4. Hadoop hdfs 从指定偏移量读取文件数据代码示例
  5. 【Linux系统编程】fork()函数详解
  6. Windows 8 快捷键收集整理
  7. 刷爆抖音,4万好评!这本 Python 3.6 的书又断货了...
  8. Oracle 12C 新特性之扩展数据类型(extended data type)
  9. Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法
  10. 非参数统计的Python实现—— Wilcoxon 符号秩检验
  11. 总有些中文情歌,让我莫明的感动了
  12. 蓝桥杯第十届c语言试题答案,[蓝桥杯][2019年第十届真题]空间跳跃 - C语言网
  13. 数学之美 吴军 读书笔记
  14. ES6基础语法(let、const、解构赋值、模板字符串、简化对象、箭头函数、扩展运算符)(一)
  15. windows 7不能安装谷歌浏览器怎么办?
  16. linux 端口耗尽,短连接以致端口耗尽
  17. maven archetype 自定义
  18. 马蜂窝陈罡:用户、内容、商业化3C矩阵,是新一代旅游市场密码
  19. B2B企业品牌驱动增长的底层逻辑
  20. UVA 12563 Jin Ge Jin Qu hao 01背包变形

热门文章

  1. Android之Android Studio三种方式导入外部资源 以及 报错处理
  2. Android之SlidingMenu使用和总结
  3. 供销大集长期持有_谁是下一个供销大集?(附股)
  4. nodejs项目_多人群聊实现其实很简单:Nodejs+WebSocket+Vue轻松实现Web IM
  5. 美女的床真的好难爬......
  6. 如何让你的碎片化时间更有价值?
  7. 1个月教你学会用Python实现机器学习
  8. python关联分析sklearn_Python3利用pandas,sklearn进行关联度分析以及预测的demo
  9. java小数强制转换,Java中的强制类型转换 大数转小数
  10. 修改正文中参考文献标注_论文写作中怎样正确插入参考文献,引用文献如何标注?...