opencv linux 界面,利用QTGUI+opencv显示图像(linux与win7)

环境:linux+qtcreator2.3+opencv2.3.1

1.配置好Creator环境

2.新建qt工程

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

3.配置pro文件,将opencv库路径添加到pro中

0818b9ca8b590ca3270a3433284dd417.png

4.编辑ui界面文件,

绘制2个按钮和2个label,保存文件

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

右键添加槽函数

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

实现:

void MainWindow::on_openPushButton_clicked()

{

QString filename = QFileDialog::getOpenFileName(this,tr("Open Image"),"",tr("Image File(*.bmp *.jpg *.jpeg *.png *.ico)"));

QTextCodec *code = QTextCodec::codecForName("gb18030");

std::string name = code->fromUnicode(filename).data();

cout<

origin_image= cv::imread(name,1);

if(!origin_image.data)

{

QMessageBox msgBox;

msgBox.setText(tr("image data is null"));

msgBox.exec();

}

else

{

int hight =ui->label->height();

int width =ui->label->width();

cout<

cv::resize(origin_image,processed_image,cv::Size(width,hight));

cv::cvtColor(processed_image,processed_image,CV_BGR2RGB);

cv::imshow("origin_image",origin_image);

cv::imshow("processed_image",processed_image);

img = QImage((const unsigned char*)(processed_image.data),processed_image.cols,processed_image.rows,QImage::Format_RGB888);

ui->label->clear();

ui->label->setPixmap(QPixmap::fromImage(img));

ui->processPushButton->setEnabled(true);

// ui->label->resize(ui->label->pixmap()->size());

}

}

void MainWindow::on_processPushButton_clicked()

{

//cv::Sobel(processed_image,processed_image,CV_8U,1,0);

cv::flip(processed_image,processed_image,1);

//cv::cvtColor(processed_image,processed_image,CV_BGR2RGB);

img = QImage((const unsigned char*)(processed_image.data),processed_image.cols,processed_image.rows,QImage::Format_RGB888);

ui->label2->clear();

ui->label2->setPixmap(QPixmap::fromImage(img));

ui->processPushButton->setEnabled(true);

//ui->label2->resize(ui->label->pixmap()->size());

ui->label2->setPixmap(QPixmap::fromImage(img));

}

4、实现效果:

发现有些图显示正常,而有些图和原图对比失真严重

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

原因在于图像在存储数据时的方式:opencv在存储图像宽度不是4的倍数时,对图像行进行了填补格式,以4补齐。这样如果Qimage的宽度不是4的倍数时会造成图像显示不正常。将Qimage宽度调整为4的倍数即可显示正常,这里对原图像进行了缩放,将其缩放成lable的大小,使label的宽度为4的倍数即可。另外

QImage是RGB排列,而Mat 是 BGR,在显示时需要进行转换。

cv::cvtColor(processed_image,processed_image,CV_BGR2RGB);  

img = QImage((const unsigned char*)(processed_image.data),processed_image.cols,processed_image.rows,QImage::Format_RGB888);

0818b9ca8b590ca3270a3433284dd417.png

路径包含中文时,无法读取图像。

环境:win7+qt5.51+opencv2.4.10

与linux下基本一样,将pro文件配置好即可。

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = cvshow

TEMPLATE = app

SOURCES += main.cpp\

mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui

INCLUDEPATH += G:\opencv2410\build\include

CONFIG(release,debug|release){

LIBS += G:\opencv2410\build\x86\vc10\lib\opencv_calib3d2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_contrib2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_core2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_features2d2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_flann2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_gpu2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_highgui2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_imgproc2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_legacy2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_ml2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_nonfree2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_objdetect2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_photo2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_stitching2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_video2410.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_videostab2410.lib \

}

CONFIG(debug,debug|release){

LIBS += G:\opencv2410\build\x86\vc10\lib\opencv_calib3d2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_contrib2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_core2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_features2d2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_flann2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_gpu2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_highgui2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_imgproc2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_legacy2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_ml2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_nonfree2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_objdetect2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_photo2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_stitching2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_ts2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_video2410d.lib \

G:\opencv2410\build\x86\vc10\lib\opencv_videostab2410d.lib \

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在QtOpenCV中,可以使用dgal库来读取和处理.tif格式的图像文件。首先,需要在代码中使用dgal库来加载.tif文件。然后,利用OpenCV的Mat类来存储和处理图像数据,并使用Qt中的QImage类将Mat对象转换为QPixmap对象,在图形界面显示.tif图像。具体代码和步骤如下所示: 1.加载图像文件:使用dgal库来加载图像文件。 ```C++ #include <dgal/dgal.h> dgal::Image<uint16_t> img; img.read("filename.tif"); ``` 2.将图像数据转换为Mat对象:使用OpenCV的Mat类来存储和处理图像数据。 ```C++ cv::Mat rawData(img.height(), img.width(), CV_16U, img.data()); ``` 3.将Mat对象转换为QPixmap对象:使用Qt中的QImage类将Mat对象转换为QPixmap对象。 ```C++ QImage image(rawData.data, img.width(), img.height(), QImage::Format_Grayscale16); QPixmap pixmap = QPixmap::fromImage(image); ``` 4.在图形界面显示.tif图像:使用Qt中的QLabel控件来显示QPixmap对象。 ```C++ QLabel *label = new QLabel(); label->setPixmap(pixmap); label->show(); ``` 通过上述步骤,我们就可以在QtOpenCV显示.tif格式的图像文件了。 ### 回答2: qt, dgal和opencv都是涉及图像处理和显示的开源库。其中,QT是一个跨平台的开源图形界面应用程序开发框架,主要用于快速开发GUI程序;dgal是一种开源的空间数据分析库,用于空间数据分析和处理;opencv则是一个开源的计算机视觉库,主要用于图像和视频处理。 .tif是一种图像文件格式,它通常用于存储高质量的图片,包括照片、图像和艺术品等。 要在Qt, dgal和opencv显示.tif格式的图像,首先需要将图像加载到相应的库中。这可以通过Qt的QImage类、dgal的GDAL库和opencv的cv::imread函数实现。加载图像后,可以使用相应库中提供的函数和工具对图像进行处理和显示。 在Qt中,可以使用QPixmap或QImage进行图像显示。对于dgal,可以使用GDAL库提供的函数进行图像处理和显示opencv则提供了cv::imshow函数来显示图像。 总之,Qt,dgal和opencv都提供了丰富的功能和工具,可以方便地处理和显示.tif格式的图像。无论是用于开发GUI程序还是进行空间数据分析和计算机视觉处理,这些库都是非常有用的工具。 ### 回答3: Qt是一个跨平台的GUI开发框架,可以与DGAL和OpenCV结合使用来显示.tif文件。其中,DGAL是一个面向计算几何和数字几何算法的C++库,OpenCV则是一个开源计算机视觉库。 首先,可以使用DGAL库中的CGAL::ImageIO类来读取.tif文件,并将其转换为DGAL中的Image对象。接着,通过使用OpenCV库中的cv::Mat类将DGAL中的Image对象转换为OpenCV中的Mat对象。最后,可以使用Qt中的QLabel或者QGraphicsView来显示存储.tif文件的OpenCV中的Mat对象。 例如,可以通过以下代码实现: #include <CGAL/ImageIO.h> #include <opencv2/core/mat.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <QImage> #include <QLabel> int main(int argc, char *argv[]) { CGAL::Image_3 image; QImage qimage; cv::Mat mat; // 读取.tif文件到DGAL的Image对象中 CGAL::ImageIO::read_TIFF_image(argv[1], image); // 将DGAL的Image对象转换为OpenCV的Mat对象 mat = cv::Mat(image.height(), image.width(), CV_8UC4, image.pixel_ptr()); // 将OpenCV的Mat对象转换为QImage对象 qimage = QImage(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32); // 通过Qt中的QLabel显示QImage对象 QLabel label; label.setPixmap(QPixmap::fromImage(qimage)); label.show(); return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值