ui

头文件
|
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之后



将Mat类型转换成QImage类型,布布扣,bubuko.com
原文:http://www.cnblogs.com/juaner767/p/3627026.html