#include "dialog.h"
#include "ui_dialog.h"
#include<QFileDialog>
#include<QSlider>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
int guassMinValue = 0;
int guassMaxValue = 10;
int guassSingleStep = 1;
ui->guassSlider->setMinimum(guassMinValue); // 最小值
ui->guassSlider->setMaximum(guassMaxValue); // 最大值
ui->guassSlider->setSingleStep(guassSingleStep); // 步长
ui->guassSlider->setTickPosition(QSlider::TicksAbove); //刻度在上方
ui->guassSlider->setValue(3);
int medMinValue = 0;
int medMaxValue = 5;
int medSingleStep = 1;
ui->medSlider->setMinimum(medMinValue); // 最小值
ui->medSlider->setMaximum(medMaxValue); // 最大值
ui->medSlider->setSingleStep(medSingleStep); // 步长
ui->medSlider->setTickPosition(QSlider::TicksAbove);//刻度在上方
ui->medSlider->setValue(3);
}
Dialog::~Dialog()
{
delete ui;
}
/*----------------------------
* 功能 : 响应用户点击打开图片按钮事件
*----------------------------
* 函数 : on_openImgBtn_clicked
* 访问 : private
* 返回 : void
*
*/
void Dialog::on_openImgBtn_clicked()
{
//打开原始灰度图
fileName = QFileDialog::getOpenFileName(this,"Open Image",".","Image File(*.png *.jpg *.jpeg *.bmp)");
grayImg = imread(fileName.toLatin1().data(),IMREAD_GRAYSCALE);
if(grayImg.empty())
return;
//cvtColor(image,image,CV_BGR2RGB);
//将图像转换为QImage格式
QImage img = QImage((const unsigned char*)(grayImg.data),grayImg.cols,grayImg.rows,QImage::Format_RGB888);
//在QLabel中显示图像
QPixmap *pixmap = new QPixmap(fileName);
pixmap->scaled(ui->oriImgLabel->size(), Qt::KeepAspectRatio);
ui->oriImgLabel->setScaledContents(true);
ui->oriImgLabel->setPixmap(*pixmap);
}
/*----------------------------
* 功能 : 响应滚动条值更改事件
*----------------------------
* 函数 : on_guassSlider_valueChanged
* 访问 : private
* 返回 : void
*
* 参数 : int value
*/
void Dialog::on_guassSlider_valueChanged(int value)
{
gaussSliderValue = value;
}
/*----------------------------
* 功能 : 响应用户点击高斯平滑按钮事件
*----------------------------
* 函数 : on_gaussImgBtn_clicked
* 访问 : private
* 返回 : void
*
*/
void Dialog::on_gaussImgBtn_clicked()
{
Mat gaussImg;
uchar gausskernelSize = gaussSliderValue * 2 + 1; //重新计算尺寸值,尺寸值应为大于0的奇数
GaussianBlur(grayImg, gaussImg, Size(gausskernelSize, gausskernelSize), 0, 0);//高斯平滑
imwrite("C://document//gauss.bmp",gaussImg);
QImage img = QImage((const unsigned char*)(gaussImg.data),gaussImg.cols,gaussImg.rows,QImage::Format_RGB888);
QPixmap *pixmap = new QPixmap("C://document//gauss.bmp");
pixmap->scaled(ui->gaussImgLabel->size(), Qt::KeepAspectRatio);
ui->gaussImgLabel->setScaledContents(true);
ui->gaussImgLabel->setPixmap(*pixmap);
}
/*----------------------------
* 功能 : 响应滚动条值更改事件
*----------------------------
* 函数 : on_medSlider_valueChanged
* 访问 : private
* 返回 : void
*
* 参数 : int value
*/
void Dialog::on_medSlider_valueChanged(int value)
{
medSliderValue = value;
}
/*----------------------------
* 功能 : 响应用户点击中值滤波按钮事件
*----------------------------
* 函数 : on_medImgBtn_clicked
* 访问 : private
* 返回 : void
*
*/
void Dialog::on_medImgBtn_clicked()
{
Mat medImg;
uchar medkernelSize = medSliderValue * 2 + 1; //重新计算尺寸值,尺寸值应为大于0的奇数
medianBlur(grayImg, medImg, medkernelSize); //中值滤波
imwrite("C://document//med.bmp",medImg);
QImage img = QImage((const unsigned char*)(medImg.data),medImg.cols,medImg.rows,QImage::Format_RGB888);
QPixmap *pixmap = new QPixmap("C://document//med.bmp");
pixmap->scaled(ui->medImgLabel->size(), Qt::KeepAspectRatio);
ui->medImgLabel->setScaledContents(true);
ui->medImgLabel->setPixmap(*pixmap);
}
/*----------------------------
* 功能 : 响应用户点击图像锐化按钮事件
*----------------------------
* 函数 : on_sharpImgBtn_clicked
* 访问 : private
* 返回 : void
*
*/
void Dialog::on_sharpImgBtn_clicked()
{
Mat sharpImg;
//定义卷积模板
Mat sharpkernel = (Mat_<float>(3, 3) <<
0, -1, 0,
-1, 5, -1,
0, -1, 0);
filter2D(grayImg, sharpImg, CV_8UC1, sharpkernel); //使用拉普拉斯算子对图像进行锐化
imwrite("C://document//sharp.bmp",sharpImg);
QImage img = QImage((const unsigned char*)(sharpImg.data),sharpImg.cols,sharpImg.rows,QImage::Format_RGB888);
QPixmap *pixmap = new QPixmap("C://document//sharp.bmp");
pixmap->scaled(ui->sharpImgLabel->size(), Qt::KeepAspectRatio);
ui->sharpImgLabel->setScaledContents(true);
ui->sharpImgLabel->setPixmap(*pixmap);
}