因为做项目要用这,也是白手起家。今天抽空把心得写下,希望大家多顶哈!最初使用v4l2,但发现工作量太大了,而且自己写的代码不如opencv这么专业!

参照http://blog.csdn.net/hsl17/article/details/6925876,及http://www.linuxidc.com/Linux/2011-11/47347.htm等几篇文章,最终将其调试成功。

第一篇文章http://blog.csdn.net/hsl17/article/details/6925876已经说的很详细了,但有个地方没有说清。我将其补全:

MyWidget即是显示视频的widget,其头文件如下:

![](image/d41d8cd98f00b204e9800998ecf8427e.jpg)

![](https://box.kancloud.cn/2016-01-19_569e21ab83431.jpg)

对应的构造函数为:

1.     capture = cvCaptureFromCAM(0);

1.     cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH,320);

1.     cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT,240);

1.     if(capture)

1.     {

1.         QMessageBox::information(this,"Information","successful!");

1.         if (capture)

1.         {

1.             frame = cvQueryFrame(capture);

1.             if (frame)

1.                 this->resize(frame->width,frame->height);

1.             qImg = new QImage(QSize(frame->width,frame->height),QImage::Format_RGB888);

1.             iplImg = cvCreateImageHeader(cvSize(frame->width,frame->height),8,3);

1.             iplImg->imageData = (char*)qImg->bits();

1.             timer = new QTimer(this);

1.             timer->setInterval(30);

1.             connect(timer,SIGNAL(timeout()),this,SLOT(nextFrame()));

1.             timer->start();

1.             writer = cvCreateVideoWriter("out.avi",CV_FOURCC('D', 'I', 'V', 'X'),10,

1.                                          cvSize(frame->width,frame->height),1);

1.             isCamera = true;

1.         }

1.     }

1.     else

1.     {

1.         QMessageBox::information(this,"Information","Sorry,fail!");

1.         isCamera = false;

1.     }

1. 这里面有个问题,第一,程序无法运行,经检查是

1. cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH,320);

1.     cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT,240);

1.

1. 这两句话的问题。查了一圈资料,貌似不支持。将其屏蔽!注释掉,程序就能运行了!

1. 第二,变量isCamera应该申明成为全局变量。按照原博客里的申明方法根本不可运行。将其申明为:static bool  isCamera = false;这句话放在头文件的外面!!!

1. 其他部分参照下面程序即可!

1. void MyWidget::paintEvent(QPaintEvent *e)

1. {

1.     QPainter painter(this);

1.     if(isCamera == true)

1.     {

1.         painter.drawImage(QPoint(0,0),*qImg);

1.     }

1.     else

1.     {

1.

1.     }

1. }

1. void MyWidget::nextFrame()

1. {

1.     frame = cvQueryFrame(capture);

1.

1.     if (frame)

1.     {

1.         if (frame->origin == IPL_ORIGIN_TL)

1.         {

1.             cvCopy(frame,iplImg,0);

1.         }

1.         else

1.         {

1.             cvFlip(frame,iplImg,0);

1.         }

1.         cvCvtColor(iplImg,iplImg,CV_BGR2RGB);

1.         cvWriteFrame(writer,frame);

1.         this->update();

1.     }

1. }

1. 疑问:

1. 第一,有时候运行程序会卡住,直接出不来图像。在MyWidget的析构函数中增加cvReleaseImage(&frame)好了很多。另外定时器的间隔时间调40ms、50ms会好点。我的电脑内存是4G,当内存占用1300多M时,运行程序卡的几率很大。重启后卡的几率就变小了。 不知道为什么??

1. 第二,每次运行程序时,在显示图片之前会有警告。mmap:无效的参数

1.  munmap:无效的参数

1. munmap;无效的参数  。。。。截图:

1. ![](https://box.kancloud.cn/2016-02-18_56c5455e73c9f.jpg)

我查了很多资料貌似是内存申请的问题。我在其他网站下载了另外一个读取摄像头视频的程序,也可以运行。程序构建和上述有点不同,但也是会出现这些警告。这些警告过后就能照常运行了。 我猜测这是第一帧图片没有正确申请内存的原因。解决办法正在思考zhong. 也希望高人过来指点!!!

linux qt读取显示图片,Linux下使用QT调用opencv读取摄像头视频 调试心得相关推荐

  1. qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...

    前言勇哥对于C语言,C++早些年有一些接触,这个系列贴子就记载一下C++应用框架的学习经验. 在写程序时,UI.基础类库.应用程序框架对于vc来讲,只能依靠MFC和QT了. 勇哥对MFC有很强的抵触, ...

  2. VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放、移动图片

    VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放.移动图片 效果展示 界面设计 代码例程 完整代码 CMyLabel.h CMyLabel.cpp BrowsePic.h BrowsePi ...

  3. opencv java 显示图片_【opencv三】利用opencv读取显示图片

    在opencv中读取显示图片的头文件是highgui.hpp. 整体代码如下,如要测试自己的图片,需要将代码段中的图片地址更改为自己图片的绝对路径. #include "opencv2/hi ...

  4. qt无法显示图片的原因

    qt无法显示图片: 原因: 1.检查图片路径,将图片路径改为全路径 如图片路径单为./jpg时,找不到图片,为全路径时可以找到 2.检查图片格式,不要乱改图片的后缀(如1.jpg改成1.png),否则 ...

  5. 保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建

    保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建 写在前面 配置VSCode的编译环境 配置VSCode的gdb调试环境 配置 ...

  6. linux终端查看文件夹图片,如何在Linux终端中显示图片

    Linux 上有许多 GUI 图片浏览器.但我尚未听说或使用过任何在终端中显示图片的应用程序.幸运的是,我刚刚发现了一个可用于在终端中显示图像的名叫 FIM 的图像查看器.FIM 引起了我的注意,是因 ...

  7. C++读图片——Mac下对于bmp文件读写读取过大的解决方案

    Mac下对bmp文件处理时size过大的解决方案 当在读写bmp信息头的时候,首先对根据C和C++的对齐预编译指令进行对齐之后,当进行读文件之后会出现biWidth和biHeight过大的情况.本篇文 ...

  8. OpenCV读取显示图片报错size.width>0

    OpenCV读取图片时 error: (-215:Assertion failed) size.width>0 && size.height>0 in function ' ...

  9. Linux系统可以显示文件名,Linux系统如何显示中文目录和文件名

    Linux系统如何显示中文目录和文件名 修改/etc/下的fstab文件,fstab内容如下 /dev/hda9 / ext2 defaults 1 1 /dev/hda8 /boot ext2 de ...

  10. yasm linux gcc,Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9

    Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9 当前两个手头有两个项目都是都需要在ARM板中使用OpenCV,所以交叉编译必不可少.两三天里一直查阅各 ...

最新文章

  1. The Guy Who Ran Microsoft And Google In China Clones US Startups
  2. 区块链技术应用的关键问题和挑战
  3. 文通表格识别系统是表格数据录入的好帮手
  4. python浪漫代码_五行Python代码实现批量抠图
  5. Linux 正则表达式基础
  6. php-cli和php-fpm FastCgi与PHP-fpm之间的关系
  7. 东南大学的计算机类和电子信息哪个专业好,东南大学王牌专业有哪些及专业排名...
  8. spring源码学习
  9. 联想启动Kind City项目:交互式全球合作鼓励同理心,共创建立于善意之上的未来
  10. python3项目源代码下载_资源整理 | 36个惊人的Python开源项目,都在这了
  11. 【小技巧】利用matlab进行批量文件下载并解压
  12. CSRF攻击原理和防范措施
  13. 读取工程下的文档 统计重复的姓名 并按次数排序 java_当多个节点有相同名字但是内容不同的时候,生成的类名是相同的,导致导入项目中的时候不好识别。...
  14. 十、InnoDB的Buffer Pool
  15. File Storage:文件存储
  16. ABP理论学习之本地化
  17. logistic逻辑回归公式推导及R语言实现
  18. 事务原子性、一致性、持久性的实现原理
  19. English马力-Lesson1(MY MYSELF,IRENE)
  20. 10. 从0学ARM-基于Exynos4412的pwm详解

热门文章

  1. F.Studio 远程备份系统
  2. Jupyter Notebook激活conda对应的环境2
  3. 2021-01-22 LR照片处理逻辑及曝光调整中的基本审美
  4. 黑马程序员 re模块的高级用法 学习笔记
  5. Unity 动态生成mesh圆圈
  6. tinyxml读xml
  7. Atitit 软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。 计算机基础理论包含以下几部分: 2 1.1. ( 1) 程序理论( 程序逻辑、程序正确性验证、形式开发方法等
  8. Atitit. null错误的设计 使用Optional来处理null
  9. 精译丨美国2017年最值得投资的7大共同基金
  10. 【图像隐写】基于matlab DWT数字水印嵌入+攻击+提取【含Matlab源码 1759期】