交叉编绎OpenCv之预览,拍照和录像
来源:互联网 发布:finalcaption字幕软件 编辑:程序博客网 时间:2024/04/28 17:52
上一篇介绍了如何交叉编绎OpenCv,本篇介绍如何使用OpenCv从USB摄像头预览,拍照和录像。
1、编绎环境
2、准备工作宿主机:ubuntu12.06 x64 3.5.0-44-generic
交叉编绎器:arm-linux-gcc 4.6.2目标平台:FreeScale I.MAX6 4核1.2G
USB摄像头一个
qt4.5 交叉编绎
3、源码解析
这里只讲解关键代码,后面会提供源码下载链接,请大家自行研究。
使用线程读取摄像头数据,并写文件,然后发送信号到widget做图片显示。
/* * CameraThread.cpp * * Created on: 2012-12-11 * Author: root */#include "CameraThread.h"#include <stdio.h>#include <iostream>using namespace std;CameraThread::CameraThread() {// TODO Auto-generated constructor stubfps = 6; //捕捉帧率cam = NULL;bStop = true;}CameraThread::~CameraThread() {// TODO Auto-generated destructor stub}/****************************** ********* 打开摄像头 *********** *******************************/void CameraThread::openCamara() { cam = cvCreateCameraCapture(2,480,320);//打开摄像头,从摄像头中获取视频流if(cam) {frame = cvQueryFrame(cam);writer = cvCreateVideoWriter("opencv.avi", CV_FOURCC('X', 'V', 'I', 'D'),fps, cvSize(frame->width, frame->height));bStop = false;}else {cout << "could not open camera." <<endl;bStop = true;}}/********************************* ********* 读取摄像头信息 *********** **********************************/void CameraThread::readFarme() {frame = cvQueryFrame(cam);// 从摄像头中抓取并返回每一帧 cvWriteFrame(writer, frame);//录像,其中writer为上面创建的视频文件,frame为视频帧// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不同的摄像头用不同的格式。image = QImage((const uchar*) frame->imageData, frame->width,frame->height, QImage::Format_RGB888).rgbSwapped();emit showImage(image);}void CameraThread::takePictures(){if(cam){// 从摄像头中抓取并返回每一帧 frame = cvQueryFrame(cam); //保存一帧 cvSaveImage("camera.jpg", frame);// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不同的摄像头用不同的格式。QImage image = QImage((const uchar*) frame->imageData, frame->width,frame->height, QImage::Format_RGB888).rgbSwapped();stop();emit showImage(image);} else {printf("have not open the camera!\n");}}void CameraThread::stop(){bStop = true;}void CameraThread::run(){openCamara();while (!bStop){readFarme();}cvReleaseVideoWriter(&writer);cvReleaseCapture(&cam);//释放内存;}
widget显示图像代码
void opencvCamera::showImage(QImage image){ui.label->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上ui.label->setFixedSize(camera->frame->width, camera->frame->height);}
4、运行效果
编译该Qt程序,放到E9板子linux文件系统下。执行该程序:./opencvCamera -qws效果如下:
5、常见错误
执行报错:
- 缺少相关库
- /lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
这时就将交叉编译器中/opt/EmbedSky/toolchains/gcc-4.6.2/tq-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/usr/lib/ 下libstdc++.so开头的几个头文件复制到E9板子/lib 目录下即可。
- 程序不可执行
源码下载:http://download.csdn.net/detail/lkppostt/6928721
0 0
- 交叉编绎OpenCv之预览,拍照和录像
- 交叉编绎OpenCv之OpenCv编绎
- 交叉编绎opencv之ffmpeg编绎
- Android 实现预览,录像,拍照
- 录像、录音和拍照
- 录像和拍照
- Android实战技巧之三十一:拍照和录像 with Camera
- MediaPlayer之视频,拍照,录像
- android 录像和拍照功能
- android 录像和拍照功能
- android 录像和拍照功能
- android 录像和拍照功能
- Android拍照和录像功能
- 【OpenCV学习】摄像头显示、录像、拍照程序
- 拍照 录像
- 拍照录像
- Android 调动系统照相机拍照和录像
- 直接调用硬件摄像头录像和拍照
- Scheduling Local Notifications(调度本地通知)
- POJ 1305 Fermat vs. Pythagoras 解原毕达哥拉斯三元组
- VS移除所有空行
- iOS开发经验总结
- OCP-1Z0-053-V13.02-111题
- 交叉编绎OpenCv之预览,拍照和录像
- CCControlButton的用法
- easyui 组件的适应
- Android Fragment应用实战,使用碎片向ActivityGroup说再见
- 友盟开发者中心
- 对于UIToolbar,UINavigationBar,UITabBar,UIBarButtonItem,UITabBarItem这几种控件的自定义
- android面试题及答案(三)
- 获取通讯录
- vector<int> 转换为 int*