linux qt读取显示图片,Linux下使用QT调用opencv读取摄像头视频 调试心得
因为做项目要用这,也是白手起家。今天抽空把心得写下,希望大家多顶哈!最初使用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读取摄像头视频 调试心得相关推荐
- qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...
前言勇哥对于C语言,C++早些年有一些接触,这个系列贴子就记载一下C++应用框架的学习经验. 在写程序时,UI.基础类库.应用程序框架对于vc来讲,只能依靠MFC和QT了. 勇哥对MFC有很强的抵触, ...
- VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放、移动图片
VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放.移动图片 效果展示 界面设计 代码例程 完整代码 CMyLabel.h CMyLabel.cpp BrowsePic.h BrowsePi ...
- opencv java 显示图片_【opencv三】利用opencv读取显示图片
在opencv中读取显示图片的头文件是highgui.hpp. 整体代码如下,如要测试自己的图片,需要将代码段中的图片地址更改为自己图片的绝对路径. #include "opencv2/hi ...
- qt无法显示图片的原因
qt无法显示图片: 原因: 1.检查图片路径,将图片路径改为全路径 如图片路径单为./jpg时,找不到图片,为全路径时可以找到 2.检查图片格式,不要乱改图片的后缀(如1.jpg改成1.png),否则 ...
- 保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建
保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建 写在前面 配置VSCode的编译环境 配置VSCode的gdb调试环境 配置 ...
- linux终端查看文件夹图片,如何在Linux终端中显示图片
Linux 上有许多 GUI 图片浏览器.但我尚未听说或使用过任何在终端中显示图片的应用程序.幸运的是,我刚刚发现了一个可用于在终端中显示图像的名叫 FIM 的图像查看器.FIM 引起了我的注意,是因 ...
- C++读图片——Mac下对于bmp文件读写读取过大的解决方案
Mac下对bmp文件处理时size过大的解决方案 当在读写bmp信息头的时候,首先对根据C和C++的对齐预编译指令进行对齐之后,当进行读文件之后会出现biWidth和biHeight过大的情况.本篇文 ...
- OpenCV读取显示图片报错size.width>0
OpenCV读取图片时 error: (-215:Assertion failed) size.width>0 && size.height>0 in function ' ...
- Linux系统可以显示文件名,Linux系统如何显示中文目录和文件名
Linux系统如何显示中文目录和文件名 修改/etc/下的fstab文件,fstab内容如下 /dev/hda9 / ext2 defaults 1 1 /dev/hda8 /boot ext2 de ...
- 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,所以交叉编译必不可少.两三天里一直查阅各 ...
最新文章
- The Guy Who Ran Microsoft And Google In China Clones US Startups
- 区块链技术应用的关键问题和挑战
- 文通表格识别系统是表格数据录入的好帮手
- python浪漫代码_五行Python代码实现批量抠图
- Linux 正则表达式基础
- php-cli和php-fpm FastCgi与PHP-fpm之间的关系
- 东南大学的计算机类和电子信息哪个专业好,东南大学王牌专业有哪些及专业排名...
- spring源码学习
- 联想启动Kind City项目:交互式全球合作鼓励同理心,共创建立于善意之上的未来
- python3项目源代码下载_资源整理 | 36个惊人的Python开源项目,都在这了
- 【小技巧】利用matlab进行批量文件下载并解压
- CSRF攻击原理和防范措施
- 读取工程下的文档 统计重复的姓名 并按次数排序 java_当多个节点有相同名字但是内容不同的时候,生成的类名是相同的,导致导入项目中的时候不好识别。...
- 十、InnoDB的Buffer Pool
- File Storage:文件存储
- ABP理论学习之本地化
- logistic逻辑回归公式推导及R语言实现
- 事务原子性、一致性、持久性的实现原理
- English马力-Lesson1(MY MYSELF,IRENE)
- 10. 从0学ARM-基于Exynos4412的pwm详解
热门文章
- F.Studio 远程备份系统
- Jupyter Notebook激活conda对应的环境2
- 2021-01-22 LR照片处理逻辑及曝光调整中的基本审美
- 黑马程序员 re模块的高级用法 学习笔记
- Unity 动态生成mesh圆圈
- tinyxml读xml
- Atitit 软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。 计算机基础理论包含以下几部分:	2 1.1. ( 1) 程序理论( 程序逻辑、程序正确性验证、形式开发方法等
- Atitit. null错误的设计 使用Optional来处理null
- 精译丨美国2017年最值得投资的7大共同基金
- 【图像隐写】基于matlab DWT数字水印嵌入+攻击+提取【含Matlab源码 1759期】