基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理

系列文章目录

基于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.算法效果演示

总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、黑电平是什么

        黑电平矫正是一种对数字图像进行的后期处理技术,它主要用于消除图像中的黑色基底偏移。在数码相机或者扫描仪等数字成像设备中,由于器件偏差等因素,黑色基底并不总是完全为黑色,这就会导致图像中的暗区域亮度不平衡,影响图像的质量。黑电平矫正可以校正这种不平衡,以确保图像中的黑色基底完全为黑色,从而提高图像的质量和可视性。

二、模拟实现黑电平矫正

1.开发UI和绑定控件

①使用QtDesigner添加button到功能框

基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理_第1张图片

②,使用QtDesigner创建黑点平矫正操作页面,用于对rgb图像的三个维度进行单独矫正。本页面其实就是一个弹出框,点击上面主页面按钮后弹出。

基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理_第2张图片

 

 

③,使用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")

2.开发黑电平矫正算法

        黑电平矫正使用最简单的减法即可,减去的值就是无光下传感器的基值,需要使用具体的传感器标定工具进行标定。

#图像黑电平处理
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

3.算法效果演示

导入原图片:

基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理_第3张图片

算法处理后:

基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理_第4张图片

 处理后图像会变暗。


总结

黑电平矫正往往直接对raw图进行矫正,rgb矫正影响较大。

你可能感兴趣的:(python,图像处理,qt)