我想在qt中使用opencv库做图像处理,显示部分用QImage来做,使用的是网上很普遍的一个例子,结果在x86和主机上执行没有任何的问题,到mini2440上执行就出现了Segmentation fault的错误提示,这个我百度了一下说是指针问题,但是找了很长时间也没找到到底是那个指针的问题,郁闷了好几天了,还希望大家帮帮忙,我的我的程序贴出来:
//mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QtGui>
#include <cv.h>
namespace Ui {
class myWidget;
}
class myWidget : public QWidget {
Q_OBJECT
public:
myWidget(const IplImage *img,QWidget *parent = 0);
~myWidget();
protected:
void paintEvent(QPaintEvent *e);
private:
Ui::myWidget *ui;
IplImage* iplImg;
QImage *qImg;
};
#endif // MYWIDGET_H
//mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QtGui/QPainter>
#include <QtCore/QPoint>
myWidget::myWidget(const IplImage *img,QWidget *parent /* = 0 */) :
QWidget(parent),
ui(new Ui::myWidget)
{
ui->setupUi(this);
qImg = new QImage(QSize(img->width,img->height),
QImage::Format_RGB888);
iplImg = cvCreateImageHeader(cvSize(img->width,img->height),
8,3);
iplImg->imageData = (char*)qImg->bits();
if (img->origin == IPL_ORIGIN_TL)
{
cvCopy(img,iplImg,0);
}
else
{
cvFlip(img,iplImg,0);
}
cvCvtColor(iplImg,iplImg,CV_BGR2RGB);
this->resize(img->width,img->height);
}
myWidget::~myWidget()
{
cvReleaseImage(&iplImg);
delete qImg;
}
void myWidget::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.drawImage(QPoint(0,0),*qImg);
}
//main.cpp函数
#include <QtGui/QApplication>
#include "mywidget.h"
#include "bmpDecoder.h"
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
IplImage *img = cvLoadImage("111.bmp");
if (img)
{
myWidget *mw = new myWidget(img);
mw->show();
}
int re = app.exec();
cvReleaseImage(&img);
return re;
}
其中这里的cvLoadImage函数是我自己写的,以前测试过没有问题的,还希望高手帮忙看看。谢谢,非常感想!