# 一、写在前面
软件介绍:
> 首先介绍一下该软件,这是我在 QT图形界面编程 这门课程上完成的大作业,主要功能分为图像处理以及视频处理两大块。
**图像处理**包括:灰度化、均值滤波、边缘检测、伽马变换、旋转镜像、亮度调节、二值化、对比度,饱和度调节、色彩调节、图片保存、水印等。
**视频处理**包括:二值化、边缘检测、灰度化、平滑、局部马赛克、缩放等。
此外还进行了界面美化、中英翻译等。
需要说明的是,由于完成的比较仓促,很多代码存在格式、效率方面的问题,希望dalao们多多包涵~
>
环境:
> 软件使用的是**QT 5.12.2+QT Creator 4.8.2+win10**,QT5版本应该都可行,视频处理涉及到OpenCV,我使用的是**OpenCV4.0.1**版本。
关于环境的安装我参考的是这篇文章:[win10系统Qt5.12配置OpenCV4.0.1库教程暨Qt,OpenCV,Cmake详细下载安装教程(史上最全!)](https://blog.csdn.net/weixin_42322013/article/details/88808230),为我提供了非常大的帮助,非常感谢!!
为了避免出现各种各样奇怪的错误,建议使用和我相同的版本(安装opencv的时候真的踩了很多很多坑)!
# 二、成品展示
话不多说,先看看成品。
图片处理:
![图片处理](https://img-blog.csdnimg.cn/20210123165908623.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzA2OTY5,size_16,color_FFFFFF,t_70)
视频处理:
![视频处理](https://img-blog.csdnimg.cn/20210123165908437.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzA2OTY5,size_16,color_FFFFFF,t_70)
# 三、图像处理
## 1.灰度化
效果:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210123171426581.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzA2OTY5,size_16,color_FFFFFF,t_70#pic_center)
代码:
```cpp
//灰度化
QImage MainWindow::gray(QImage image){
QImage newImage =image.convertToFormat(QImage::Format_ARGB32);
QColor oldColor;
for(int y = 0; y < newImage.height(); y++)
{
for(int x = 0; x < newImage.width(); x++)
{
oldColor = QColor(image.pixel(x,y));
int average = (oldColor.red() + oldColor.green() + oldColor.blue()) / 3;
newImage.setPixel(x, y, qRgb(average, average, average));
}
}
return newImage;
}
```
## 2.均值滤波
效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210123171807785.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzA2OTY5,size_16,color_FFFFFF,t_70#pic_center)
代码:
```cpp
//均值滤波
QImage MainWindow::junzhi(QImage image){
int kernel [3][3] = {
{1,1,1},
{1,1,1},
{1,1,1}};
int sizeKernel = 3;
int sumKernel = 9;
QColor color;
for(int x = sizeKernel/2;x<image.width() - sizeKernel/2;x++)
{
for(int y= sizeKernel/2;y<image.height() - sizeKernel/2;y++)
{
int r = 0;
int g = 0;
int b = 0;
for(int i = -sizeKernel/2;i<=sizeKernel/2;i++)
{
for(int j = -sizeKernel/2;j<=sizeKernel/2;j++)
{
color = QColor(image.pixel(x+i,y+j));
r+=color.red()*kernel[sizeKernel/2+i][sizeKernel/2+j];
g+=color.green()*kernel[sizeKernel/2+i][sizeKernel/2+j];
b+=color.blue()*kernel[sizeKernel/2+i][sizeKernel/2+j];
}
}
r = qBound(0,r/sumKernel,255);
g = qBound(0,g/sumKernel,255);
b = qBound(0,b/sumKernel,255);
image.setPixel(x,y,qRgb( r,g,b));
}
}
return image;
}
```
## 3.边缘检测
效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210123171956462.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzA2OTY5,size_16,color_FFFFFF,t_70#pic_center)
代码:
```cpp
//边缘检测
QImage MainWindow::bianyuan(QImage image){
QImage newImage =image.convertToFormat(QImage::Format_ARGB32);
QColor color0;
QColor color1;
QColor color2;
QColor color3;
int r = 0;
int g = 0;
int b = 0;
int rgb = 0;
int r1 = 0;
int g1 = 0;
int b1 = 0;
int rgb1 = 0;
int a = 0;
for( int y = 0; y < image.height() - 1; y++)
{
for(int x = 0; x < image.width() - 1; x++)
{
color0 = QColor ( image.pixel(x,y));
color1 = QColor ( image.pixel(x + 1,y));
color2 = QColor ( image.pixel(x,y + 1));
color3 = QColor ( image.pixel(x + 1,y + 1));
r = abs(color0.red() - color3.red());
g = abs(color0.green() - color3.green());
b = abs(color0.blue() - color3.blue());
rgb = r + g + b;
r1 = abs(color1.red() - color2.red());
g1= abs(color1.green() - color2.green());
b1 = abs(color1.blue() - color2.blue());
rgb1 = r1 + g1 + b1;
a = rgb + rgb1;
a = a>255?255:a;
newImage.setPixel(x,y,qRgb(a,a,a));
}
}
return newImage;
}
```
## 4.伽马变换
效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210123172207899.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzA2OTY5,size_16,color_FFFFFF,t_70#pic_center)
代码:
```cpp
QImage MainWindow::gamma(QImage image){
double d=1.2;
QColor color;
int height = image.height();
int width = image.width();
for (int i=0;i<width;i++){
for(int j=0;j<height;j++){
color = QColor(image.pixel(i,j));
double r = color.red();
double g = color.green();
double b = color.blue();
int R = qBound(0,(int)qPow(r,d),255);
int G = qBound(0,(int)qPow(g,d),255);
int B = qBound(0,(int)qPow(b,d),255);
image.setPixel(i,j,qRgb(R,G,B));
}
}
return image;
}
```
## 5.亮度调节(槽函数)
代码:
```cpp
//亮度调节
void MainWindow::on_horizontalSlider_valueChanged(int value)
{
if(origin_path!=nullptr){ //origin_path需要换成你的图片路径
QImage image(origin_path);
int red, green, blue;
int pixels = image.width() * image.height();
unsigned int *data = (unsigned int *)image.bits();
for (int i = 0; i < pixels; ++i)
{
red= qRed(data[i])+ value;
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green= qGreen(data[i]) + value;
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue= qBlue(data[i]) + value;
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue ;
data[i] = qRgba(red, green, blue, qAlpha(data[i]));
}
QImage Image=ImageCenter(image,ui->label_show);
ui->label_show->setPixmap(QPixmap::fromImage(Image));
ui->label_show->setAlignment(Qt::AlignCenter);
ui->label_light->setText(QString::number(value));
}
else{
QMessageBox::warning(nullptr, "提示", "请先选择一张图片!", QMessageBox::Yes | QMessageBox::Yes);
}
}
```
## 6.二值化(可变)(槽函数)
槽函数代码:
```cpp
//二值化滑动条
void MainWindow::on_horizontalSlider_erzhi_valueChanged(int value)
{
if(origin_path!=nullptr){
QImage image(origin_path);
QImage images=gray(image);
int height=images.height();
int width=images.width();
程序员张小妍
- 粉丝: 1w+
- 资源: 3474
最新资源
- 毕设和企业适用springboot智能制造平台类及数字货币管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造平台类及在线教育管理系统源码+论文+视频.zip
- 毕设和企业适用springboot智能制造平台类及在线药品管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造平台类及在线音乐平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造平台类及资产管理平台源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及电影票务系统源码+论文+视频.zip
- 毕设和企业适用springboot智能制造平台类及自动化控制系统源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及客户服务智能化平台源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及客户管理系统源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及企业管理智能化平台源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及数据可视化平台源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及团队协作平台源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及网络安全防护平台源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及物流追踪系统源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及医疗信息管理平台源码+论文+视频.zip
- 毕设和企业适用springboot众筹平台类及线上文件管理系统源码+论文+视频.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈