from PyQt5.QtWidgets import QDialog, QFileDialog, QMessageBox
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.Qt import Qt
from defogging.uis.defogui import Ui_defog
from defogging.core.defog import Defog
from PIL import Image
import cv2
import sys, os
import numpy as np
class DefogFrame(QDialog):
def __init__(self):
super(DefogFrame, self).__init__()
# 完成UI的加载
self.ui = Ui_defog()
# 使用setupUi绑定对话框(父窗体)
self.ui.setupUi(self)
# 创建去雾对象
self.defog = Defog()
# 当前显示的图像
self.img = None
# 设置按钮初始状态
self.ui.pushButton_defog.setEnabled(False)
self.ui.pushButton_contrast.setEnabled(False)
self.ui.pushButton_save.setEnabled(False)
self.ui.pushButton_saveContrast.setEnabled(False)
self.ui.pushButton_defog_lighten.setEnabled(False)
# 覆盖QDialog原来两个我们不需要的默认功能
def closeEvent(self, e):
# 窗体关闭前的释放工作,条件不满足可以阻止窗体关闭
sys.exit(0)
def keyPressEvent(self, e):
# 阻止按照ESC键关闭窗体
pass
# 显示图像
def images_show(self, h, w, c, data):
image = QImage(data, w, h, w * c ,QImage.Format_RGB888)
pix = QPixmap.fromImage(image)
# 获取QLabel的大小
width = self.ui.label_img.width()
height = self.ui.label_img.height()
# 等比例放缩图片
scaledPixmap = pix.scaled(width,height,Qt.KeepAspectRatio)
self.ui.label_img.setPixmap(scaledPixmap)
# 槽函数,加载图像
def load_image(self):
image_format = ['jpg', 'png', 'bmp']
filepath, imgtype = QFileDialog.getOpenFileName(self, "加载图片", "./", "(*.jpg *.png *.bmp)")
if not len(filepath):
QMessageBox.information(self, "提示", "请加载需要处理的图片!", QMessageBox.Yes)
else:
for i in range(len(image_format)):
ret = filepath.find(image_format[i])
break
if not ret:
QMessageBox.information(self, "提示", "请正确加载图片!", QMessageBox.Yes)
else:
self.ui.textEdit_addr.setText(filepath)
data = self.defog.readFile(filepath)
img_data = data[3]
img_data = cv2.cvtColor(img_data, cv2.COLOR_RGB2BGR)
h, w, c = img_data.shape
self.img = img_data
self.images_show(h, w, c, img_data.tobytes())
# 批量设置按钮状态
self.ui.pushButton_defog.setEnabled(True)
self.ui.pushButton_contrast.setEnabled(True)
self.ui.pushButton_save.setEnabled(True)
self.ui.pushButton_saveContrast.setEnabled(True)
self.ui.pushButton_defog_lighten.setEnabled(True)
# 槽函数,图片另存为...
def save_image(self):
save_path = QFileDialog.getSaveFileName(self, "文件保存", "./", "JPG Image (*.jpg);;PNG Image (*.png);;BMP Image (*.bmp);;All Files (*)")
if save_path[0] == '':
QMessageBox.information(self, "提示", "无效路径,请重新保存!", QMessageBox.Yes)
else:
im = Image.fromarray(self.img)
im.save(save_path[0])
# 调用图像去雾模块
def defog(self):
# 获取原图像
orig_img = self.defog.img_src
# 调用图像去雾函数
self.img = self.defog.deHaze(orig_img/ 255.0)* 255
self.img = self.img.astype(np.uint8)
self.img = cv2.cvtColor(self.img, cv2.COLOR_RGB2BGR)
h, w, c = self.img.shape
# 显示去雾处理后的图片
self.images_show(h, w, c, self.img)
# 去雾且调亮
def defog_lighten(self):
# 获取原图像
orig_img = self.defog.img_src
# 调用图像去雾函数, 使用gamma校正
self.img = self.defog.deHaze(orig_img/ 255.0, bGamma=True)* 255
self.img = self.img.astype(np.uint8)
self.img = cv2.cvtColor(self.img, cv2.COLOR_RGB2BGR)
h, w, c = self.img.shape
# 显示去雾处理后的图片
self.images_show(h, w, c, self.img)
# 查看对比图
def view_contrast(self):
orig_img = self.defog.img_src
new_imf = self.img
new_imf = cv2.cvtColor(new_imf, cv2.COLOR_RGB2BGR)
cv2.imshow('Compare',np.concatenate([orig_img, new_imf],1))
cv2.waitKey()
# 保存对比图
def save_contrast(self):
save_path = QFileDialog.getSaveFileName(
self, "文件保存", "./", "JPG Image (*.jpg);;PNG Image (*.png);;BMP Image (*.bmp);;All Files (*)")
if save_path[0] == '':
QMessageBox.information(self, "提示", "无效路径,请重新保存!", QMessageBox.Yes)
else:
orig_img = self.defog.img_src
orig_img = cv2.cvtColor(orig_img, cv2.COLOR_RGB2BGR)
contrast = np.concatenate([orig_img, self.img], 1)
contrast = Image.fromarray(contrast)
contrast.save(save_path[0])
案例@图像去雾效果.zip
需积分: 5 133 浏览量
2022-08-18
16:24:15
上传
评论
收藏 1009KB ZIP 举报
撸码的xiao摩羯
- 粉丝: 183
- 资源: 92
最新资源
- 目标检测-零售食品LOGO检测数据集-40000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 目标检测-零售食品LOGO检测数据集-30000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 目标检测-零售食品LOGO检测数据集-20000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 目标检测-零售食品LOGO检测数据集-10000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 基于GUI+MYSQL+JAVA图书管理系统文档说明+源码(高分大作业项目).zip
- 基于Qt使用C++实现图书管理系统源码+数据库(95分以上).zip
- 基于GUI+MYSQL+JAVA票务管理系统文档介绍+源码+数据库(高分大作业).zip
- 优先编码器除法电微分运算电路 全加器函数发生电路等电路经典Multisim仿真实验源文件合集(25个).zip
- 2331308JS课堂案例.zip
- STM32H750VBT6单片机最小系统开发板AD设计硬件(原理图+PCB+3D封装库)工程文件.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0