基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建
基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定
基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理
基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理
基于PyQt5的桌面图像调试仿真平台开发(5)亮度处理
基于PyQt5的桌面图像调试仿真平台开发(6)去马赛克
基于PyQt5的桌面图像调试仿真平台开发(7)伽马矫正
基于PyQt5的桌面图像调试仿真平台开发(8)锐化
基于PyQt5的桌面图像调试仿真平台开发(9)去噪
基于PyQt5的桌面图像调试仿真平台开发(10)色彩矩阵
基于PyQt5的桌面图像调试仿真平台开发(11)清晰度测试
基于PyQt5的桌面图像调试仿真平台开发(12)图像灰度显示
基于PyQt5的桌面图像调试仿真平台开发(13)图像边缘显示
基于PyQt5的桌面图像调试仿真平台开发(14)色彩增强
基于PyQt5的桌面图像调试仿真平台开发(15)图像融合
工程代码:https://gitee.com/xiaoshixiao00/py-ispp
文章目录
目录
系列文章目录
前言
一、黑电平是什么
二、模拟实现黑电平矫正
1.开发UI和绑定控件
2.开发黑电平矫正算法
3.算法效果演示
总结
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
黑电平矫正是一种对数字图像进行的后期处理技术,它主要用于消除图像中的黑色基底偏移。在数码相机或者扫描仪等数字成像设备中,由于器件偏差等因素,黑色基底并不总是完全为黑色,这就会导致图像中的暗区域亮度不平衡,影响图像的质量。黑电平矫正可以校正这种不平衡,以确保图像中的黑色基底完全为黑色,从而提高图像的质量和可视性。
①使用QtDesigner添加button到功能框
②,使用QtDesigner创建黑点平矫正操作页面,用于对rgb图像的三个维度进行单独矫正。本页面其实就是一个弹出框,点击上面主页面按钮后弹出。
③,使用PyUic转化Main_window.ui为Main_window.py,转化Blc_widget.ui为Blc_widget.py
③,在Main_app.py中添加自定义空间Widget_Event,此页面是所有弹出框的父类,用于处理右击,保存事件。
class Widget_Event(QWidget):
def set_window(self, window):
self.window = window
# 右击事件
def contextMenuEvent(self, event: QtGui.QContextMenuEvent) -> None:
menu = QMenu(self)
save_action = menu.addAction('保存')
now_action = menu.exec_(self.mapToGlobal(event.pos()))
print("右击:")
if now_action == save_action:
self.save_file()
# 保存事件
def save_file(self):
print("save_file:")
file, ok = QFileDialog.getSaveFileName(self, '文件保存', '/', 'png(*.png)')
#print("proc:",self.window.src_proc)
cv2.imwrite(file, cv2.cvtColor(self.window.src_proc, cv2.COLOR_RGB2BGR))
print(file)
MyBlcwidget继承自Widget_Event和Blc_widget.Ui_Form,这样MyBlcwidget既有自定义按钮的样式,也有保存右击等功能。
#blc处理
class MyBlcwidget(Widget_Event,Blc_widget.Ui_Form):
def __init__(self):
super(Widget_Event,self).__init__()
self.setupUi(self)
最后绑定按钮点击事件。
self.blc_btn.clicked.connect(self.on_click_blc_widget)
按钮点击事件弹出对话框
#黑电平处理
def on_click_blc_widget(self):
self.mywidget=MyBlcwidget()
self.mywidget.set_window(self)
self.mydialog = MyOptDialog()#如果是局部变量会造成对话框弹出就消失
for i in range(self.mydialog.opt_layout.count()):
self.mydialog.opt_layout.itemAt(i).widget().deleteLater()
self.mydialog.opt_layout.addWidget(self.mywidget)
self.mydialog.show()
self.mywidget.blc_sure_btn.clicked.connect(self.blc_proc_onclicksure)
print("show blc widget")
绑定对话框中图像处理算法确定事件
# blc处理确定事件
def blc_proc_onclicksure(self):
print("blc_proc_onclicksure")
if self.open_src is not None:
print(self.mywidget.blc_r_textEdit.toPlainText(), " ",
int(self.mywidget.blc_r_textEdit.toPlainText()))
print(self.mywidget.blc_g_textEdit.toPlainText(), " ",
int(self.mywidget.blc_g_textEdit.toPlainText()))
print(self.mywidget.blc_b_textEdit.toPlainText(), " ",
int(self.mywidget.blc_b_textEdit.toPlainText()))
self.src_proc = Image_proc.proc_image_blc(self.open_src
, int(
self.mywidget.blc_r_textEdit.toPlainText()), int(
self.mywidget.blc_g_textEdit.toPlainText()), int(
self.mywidget.blc_b_textEdit.toPlainText()))
self.dialg_display_proc_img()
print("Img Not None")
else:
print("Img Is None")
黑电平矫正使用最简单的减法即可,减去的值就是无光下传感器的基值,需要使用具体的传感器标定工具进行标定。
#图像黑电平处理
def proc_image_blc(image_rgb,r,g,b):
print("proc_image_blc:",r,g,b)
r_ary,g_ary,b_ary=cv2.split(image_rgb)
r_ary = (r_ary.astype('int32') - r).clip(0, 255).astype('uint8')# 防止减到负数
g_ary = (g_ary.astype('int32') - g).clip(0, 255).astype('uint8')
b_ary = (b_ary.astype('int32') - b).clip(0, 255).astype('uint8')
result = cv2.merge([r_ary, g_ary, b_ary])
return result
导入原图片:
算法处理后:
处理后图像会变暗。
总结
黑电平矫正往往直接对raw图进行矫正,rgb矫正影响较大。