首页 > 其他 > 详细

将Mat类型转换成QImage类型

时间:2014-03-27 06:16:09      阅读:970      评论:0      收藏:0      [点我收藏+]

ui

bubuko.com,布布扣

头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
using namespace cv;
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
     
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    void Mat2QImage(Mat image);
//    void salt(Mat &image, int n);
//    void colorReduce(Mat image,int div);
     
private slots:
    void on_pushButton_clicked();
private:
    Ui::Dialog *ui;
    Mat img;
    QImage qimg;
};
#endif // DIALOG_H

源文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "dialog.h"
#include "ui_dialog.h"
 
#include <QFileDialog>
 
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
   ui->setupUi(this);
}
Dialog::~Dialog()
{
    delete ui;
}
void Dialog::on_pushButton_clicked()
{
    QString filename= QFileDialog::getOpenFileName(this,tr("choose image"),QDir::currentPath());//父窗口 窗口名 路径
 
    img=imread(filename.toAscii().data());
    Mat2QImage(img);
}
void Dialog::Mat2QImage(Mat image)
{
    //图片的显示主要问题还是在于QImage与Mat格式的不同,其中QImage是RGB排列,而Mat 是 BGR,
        //同时两者格式包含的内容页不同,因此需要经过转换才能够显示。
        Mat rgb;
        QImage img;
        //salt(image ,100000);
      // colorReduce(image,64);
      
        if(image.channels()==3)
            {
                //cvt Mat BGR 2 QImage RGB
                cvtColor(image,rgb,CV_BGR2RGB);
                img =QImage((const unsigned char*)(rgb.data),
                            rgb.cols,rgb.rows,
                            rgb.cols*rgb.channels(),
                            QImage::Format_RGB888);
            }
            else
            {
                img =QImage((const unsigned char*)(image.data),
                            image.cols,image.rows,
                            image.cols*image.channels(),
                            QImage::Format_RGB888);
            }
            //ui->label->setPixmap(QPixmap::fromImage(img));  //QImage转换为QPixmap
            //ui->label->resize(ui->label->pixmap()->size());
            QImage imgScaled ;
            imgScaled = img.scaled(ui->label->size(),Qt::KeepAspectRatio);//默认保持原图的宽高比  以label大小为大小
            ui->label->setPixmap(QPixmap::fromImage(imgScaled));
             
}
 
void Dialog::salt(cv::Mat &image, int n)
{
    int i,j;
    for (int k=0; k<n; k++)
    {
        i= qrand()%image.cols;
        j= qrand()%image.rows;
        if (image.channels() == 1) { // gray-level image
            image.at<uchar>(j,i)= 255;
        } else if (image.channels() == 3)
        {    // color image
            /* 注意 Mat::at 函数是个模板函数, 需要指明参数类型, 因为这张图是具有红蓝绿三通道的图,
               所以它的参数类型可以传递一个 Vec3b, 这是一个存放 3 个 uchar 数据的 Vec(向量). 这里
               提供了索引重载, [2]表示的是返回第三个通道, 在这里是 Red 通道, 第一个通道(Blue)用[0]返回 */
            image.at<cv::Vec3b>(j,i)[0]= 255;//白点;
            image.at<cv::Vec3b>(j,i)[1]= 255;
            image.at<cv::Vec3b>(j,i)[2]= 255;
        }
    }
}
void Dialog::colorReduce(Mat image, int div)
{
    int nl= image.rows; // number of lines
    int nc= image.cols * image.channels(); // total number of elements per line
          for (int j=0; j<nl; j++)
          {
              uchar* data= image.ptr<uchar>(j);//获取每一行开始处的指针
              for (int i=0; i<nc; i++)
              {
                // process each pixel ---------------------
                    data[i]= data[i]/div*div+div/2;
                // end of pixel processing ----------------
              } // end of line
          }
} 

colorReduce之后

bubuko.com,布布扣

 

bubuko.com,布布扣

 

 

bubuko.com,布布扣

将Mat类型转换成QImage类型,布布扣,bubuko.com

将Mat类型转换成QImage类型

原文:http://www.cnblogs.com/juaner767/p/3627026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!