Arm下使用Qt和Opencv进行图像处理的入门例程和遇到的问题
2014-08-27 10:59
821 查看
费了9牛2虎之力,终于把Qt和Opencv给移植到了Arm开发板中,下面就可以开始进行初步的图像处理工作了。
下面是一个图像处理最初步的将图像转化为灰度图并进行显示的例程,可以用来测试Qt和Opencv的移植是否成功。
1 彩图转灰度图的例程
在qtcreator中建立一个Qt Widgets Application,
先在QT项目文件中将opencv的头文件和库的路径包含进去,如下图所示:
下面是头文件widget.h的代码:
源文件widget.cpp的代码:
主程序main.cpp的代码:
点击左下角的Run,便可以将图像转化为灰度图
2 遇到的问题
接着说一下目前遇到的一些问题:
1. jpg格式的图片无法显示的问题
一开始程序怎么都显示不出结果,只弹出一个空白的对话框,后面用png格式的图片测试显示成功,才发现是jpg格式图片的支持出问题啦,解决办法是:
编译QT的时候需要选择参数"-qt-libjpg" ,然后在开发板的环境变量中要指定plugin插件的路径“export set QT_PLUGIN_PATH=$QTDIR/plugins”,之前我就是因为少了这句所以无法支持jpg格式图片的显示。
2. 开发板无法读取摄像头
在ubuntu上写好的程序,能够打开电脑上自带的摄像头,但是交叉编译到开发板中运行却报错:
HIGHGUI ERROR : V4L: device /dev/video0: Unable to query number of channels
Segmentation fault
这个问题目前还不知道怎么解决,希望知道的朋友告知一下。
目前的猜测是因为程序中用到了opencv的cvCreateCameraCapture()函数,好像这个函数是属于头文件highgui.h里面的? arm开发板对highgui.h里面的函数好像都不怎么支持(但是cvLoadImage可以使用),为什么会这样我也弄不明白,希望高人指点一下。
现在可能的解决办法只有放弃使用opencv的cvCreateCameraCapture()函数,自己用V4L2协议写一个读取摄像头输出数据的程序了,但是V4L2感觉蛮复杂的,等弄明白了再来补充。
3. 开发板运行程序时找不到.so文件
这是因为在电脑上交叉编译程序时,QT中设置的.so文件的路径使电脑中的路径,所以开发板中的.so文件也要放在同样的路径中,这样程序的可执行文件才能按照这个路径在开发板中查找到所需的.so文件。
下面是一个图像处理最初步的将图像转化为灰度图并进行显示的例程,可以用来测试Qt和Opencv的移植是否成功。
1 彩图转灰度图的例程
在qtcreator中建立一个Qt Widgets Application,先在QT项目文件中将opencv的头文件和库的路径包含进去,如下图所示:
下面是头文件widget.h的代码:
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QLabel> #include <QPixmap> #include <QHBoxLayout> #include "cv.h" #include "highgui.h" class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); private: IplImage *img,*img_gray; QImage *qmg; QLabel *label; }; #endif // WIDGET_H
源文件widget.cpp的代码:
#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { QWidget *window = new QWidget; window->setWindowTitle("Image"); img = cvLoadImage("test.JPG"); img_gray = cvCreateImage(cvGetSize(img),8,1); cvCvtColor(img,img_gray,CV_BGR2GRAY); qmg = new QImage((unsigned char*)img_gray->imageData,img_gray->width, img_gray->height,img_gray->widthStep, QImage::Format_Indexed8); label = new QLabel(); label->setPixmap(QPixmap::fromImage(*qmg)); label->setScaledContents(true); label->resize(this->size()); QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(label); window->setLayout(layout); window->show(); } Widget::~Widget() { cvReleaseImage( &img ); }
主程序main.cpp的代码:
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; return a.exec(); }
点击左下角的Run,便可以将图像转化为灰度图
2 遇到的问题
接着说一下目前遇到的一些问题:1. jpg格式的图片无法显示的问题
一开始程序怎么都显示不出结果,只弹出一个空白的对话框,后面用png格式的图片测试显示成功,才发现是jpg格式图片的支持出问题啦,解决办法是:
编译QT的时候需要选择参数"-qt-libjpg" ,然后在开发板的环境变量中要指定plugin插件的路径“export set QT_PLUGIN_PATH=$QTDIR/plugins”,之前我就是因为少了这句所以无法支持jpg格式图片的显示。
2. 开发板无法读取摄像头
在ubuntu上写好的程序,能够打开电脑上自带的摄像头,但是交叉编译到开发板中运行却报错:
HIGHGUI ERROR : V4L: device /dev/video0: Unable to query number of channels
Segmentation fault
这个问题目前还不知道怎么解决,希望知道的朋友告知一下。
目前的猜测是因为程序中用到了opencv的cvCreateCameraCapture()函数,好像这个函数是属于头文件highgui.h里面的? arm开发板对highgui.h里面的函数好像都不怎么支持(但是cvLoadImage可以使用),为什么会这样我也弄不明白,希望高人指点一下。
现在可能的解决办法只有放弃使用opencv的cvCreateCameraCapture()函数,自己用V4L2协议写一个读取摄像头输出数据的程序了,但是V4L2感觉蛮复杂的,等弄明白了再来补充。
3. 开发板运行程序时找不到.so文件
这是因为在电脑上交叉编译程序时,QT中设置的.so文件的路径使电脑中的路径,所以开发板中的.so文件也要放在同样的路径中,这样程序的可执行文件才能按照这个路径在开发板中查找到所需的.so文件。
相关文章推荐
- android 使用NDK进行图像处理(openCV)时的图像转换问题(灰度图显示)
- 使用openCV对JPEG图像内存进行解码及时间过长问题;
- vs2013在图像处理中的应用(6):使用OpenCV进行图像处理
- Hadoop处理图像调用opencv遇到的问题
- VS使用中遇到的问题--图像处理
- 图像处理遇到的一些问题整理(OpenCV and Emgu)
- qt中使用opencv处理图片 QImage 和 IplImage 相互之间转换问题
- 【ARM-Linux开发】使用QT和Gstreanmer 遇到的一些问题
- Android Studio 接入OpenCV 3.2.0 并不使用OpenCV_Manager_3.2.0的APK包来进行图像处理
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- Opencv图像处理编程时遇到的各种问题
- opencv图像边缘检测使用,先做平滑处理在进行边缘检测
- OpenGL使用OpenCV处理图像进行纹理映射的使用范例
- ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇
- linux下使用opencv接口函数对图像进行光滑处理
- android开发在jni中使用Opencv进行图像处理,环境搭建篇
- 数字图像处理之配置opencv中遇到的问题
- 使用OpenCV 实现多摄像头图像处理笔记(1):DirectShow的配置过程可能出现的问题
- 使用OpenCV读、操作、写图像并与bash合作对某个目录下所有图像进行类似处理
- 使用谷歌开源组件tesseract-OCR识别身份证,通过opencv处理图像后再进行识别(windows版本)