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

news2024/7/4 6:21:18

系列文章目录

基于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到功能框

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

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

导入原图片:

算法处理后:

 处理后图像会变暗。


总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】动态规划 刷题训练(七)

文章目录 918. 环形子数组的最大和题目解析状态转移方程f[i]状态转移方程g[i]状态转移方程 初始化返回值完整代码 152. 乘积最大子数组题目解析状态转移方程f[i]状态转移方程g[i]状态转移方程 初始化完整代码 1567. 乘积为正数的最长子数组长度题目解析状态转移方程f[i]状态转移…

前端-盒子模型

元素显示模式 块级 行内 行内块 外边距折叠现象 合并现象 塌陷现象 (1)合并现象 场景:垂直布局的块级元素,上下的 margin 会合并 结果:最终两者距离为 margin 的最大值 解决方法:只给其中一个盒子设置 …

u盘ntfs和fat32哪个好 把u盘改成ntfs有什么影响

u盘在日常生活中的使用频率很高,许多用户在选购u盘时很少会注意到u盘格式,但u盘的格式对u盘的使用有很大影响。u盘格式有很多,常见的有ntfs和fa32,u盘ntfs和fat32哪个好?这要看u盘的使用场景。把u盘改成ntfs有什么影响…

简要记录java 锁

Java中的锁机制主要分为Lock和Synchronized. Synchronized在JVM里的实现是基于进入和退出Monitor对象来实现方法同步和代码块同步的。monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处,JVM要保证每个mon…

datatable刷新数据,js不整体刷新页面,使用DataTables表格插件定时更新后台数据变化

文章目录 前言一、meta的http-equiv属性二、使用DataTables表格插件2.1.整体思路2.2.将$(#myTableId).DataTable({……})封装成函数2.3刷新表格数据函数2.4统一调用刷新表格的自动加载函数2.4定时间隔执行刷新自动加载函数 前言 最近遇到一个需求,需要刷…

【新版系统架构】第七章-系统架构设计基础知识(架构风格、复用)

软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 第一章-绪论第二章-计算机系统基础知识(一)第二章-计算机系统基础知识(二)第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…

安装两个mysql

标题:安装两个mysql 参考blog:MySQL–修改mysql服务可执行文件的路径(Windows) 参考视频:mysql安装-安装多个mysql方法 安装第一个,网上有很多教程,这里就附上一个链接了:mysql5.5安装 安装第…

JS知识点汇总(七)--数据类型

1. JavaScript中的简单数据类型有哪些? 1、概述 JS 中有六种简单数据类型:undefined、null、boolean、string、number、symbol ES10中的新特性 BigInt (任意精度整数),目前还处于stage-4阶段,不出意外即将成为js的第七种基本数据…

036:mapboxGL点击某位置,转换坐标为地址,弹出地理信息

第036个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中点击某位置,转换坐标位地址,弹出地理信息. 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共106行)相关API参考:专栏目标示例效果 配置方式 1)…

完整的复数类

复数类应该具有的操作 运算:,-,*,/ 比较:,! 赋值: 求模:modulus 利用操作符重载 统一复数与实数的运算方式 统一复数与实数的比较方式 注意事项 C 规定赋值操作符 () 只能重载…

vue项目运行不起来,可能是版本等不兼容问题

给pakeage.json 运行脚本前加上:set NODE_OPTIONS--openssl-legacy-provider && 即可。

echarts 实现3D饼图

2023.6.30今天我学习了如何使用echarts渲染一个3d的饼图&#xff0c;效果如下&#xff1a; 相关代码如下&#xff1a; <template><div ref"pie3d"/> </template> <script>mounted() {this.myChart this.$echarts.init(this.$refs.pie3d);…

【AUTOSAR】BMS开发实际项目讲解(二十五)----电池管理系统安全状态过渡

安全状态过渡 关联的系统需求 TSR-BMS-S201、TSR-BMS-S202、TSR-BMS-S203、TSR-BMS-S204、TSR-BMS-S601、TSR-BMS-S602、TSR-BMS-S603、TSR-BMS-S604、TSR-BMS-S605、TSR-BMS-S606、TSR-BMS-S607、TSR-BMS-S608、TSR-BMS-S609、TSR-BMS-S610、TSR-BMS-S611、TSR-BMS-S612; TSC…

【Linux系统编程】—进程学习笔记(fork进程创建、退出、僵死进程与孤儿进程、如何避免僵死进程)

目录 一、进程关键概念 二、进程创建实战 1、fork函数 2、fork创建一个子进程的一般目的&#xff1a; 3、fork函数实例&#xff1a; 4、fork的写时拷贝技术&#xff08;COW&#xff09; 三、进程退出 1、正常退出 2、异常退出 3、总结 四、僵死进程与孤儿进程 1、什…

融合学习:跨文化交流的学习平台

在全球化的时代&#xff0c;跨文化交流已经成为了一个不可避免的现象。在这种情况下&#xff0c;融合学习平台成为了一个非常重要的工具&#xff0c;可以帮助人们更好地了解和学习不同文化之间的差异和相似之处。本文将探讨融合学习平台的重要性&#xff0c;以及如何选择最佳的…

构建交互式数据框架:使用Gradio的Dataframe模块

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

查找算法-线性搜索

线性搜索 简介 线性搜索是一种简单的搜索算法&#xff0c;也被称为顺序搜索。它从数据集的起始位置开始&#xff0c;逐个比较每个元素&#xff0c;直到找到目标元素或遍历完整个数据集为止。如果目标元素存在于数据集中&#xff0c;线性搜索会返回该元素的位置或索引&#xf…

照片如何转存到手机笔记中?具体方法教程在这里

传统的笔记形式一般是以文字的形式记录&#xff0c;通常是在一个笔记本中写下自己的所感所想、工作、生活等方面的内容。有时也有人会选择贴上照片&#xff0c;成为个人回忆的重要资料。 而随着手机笔记的出现&#xff0c;很多人选择使用它来记录&#xff0c;因为我们可以随时…

小米 红米 Redmi note11 4G 5G 手机解锁BL 秒BL解锁 教程 跳过168小时 selenes evergo线刷机包下载

红米&#xff08;Redmi&#xff09;Note 11 5G 手机BL解锁 红米note11 4G/5G 秒解锁BL锁 方法 教程 跳过168小时 新版本 selenes evergo 红米Note11系列版本非常多&#xff0c;从4G开始一直到后面出现的11R&#xff0c;我们常见的机型有红米 Note11/11Pro/11Pro/11SE/11R等等&…

管理类联考——数学——知识篇——公式——最难记

立方和与立方差公式 a 3 b 3 ( a b ) ( a 2 ∓ a b b 2 ) a^3b^3(ab)(a^2∓abb^2) a3b3(ab)(a2∓abb2) 一元二次方程求根公式 x − b b 2 − 4 a c 2 a &#xff0c; b 2 − 4 a c ≥ 0 x\frac{-b\sqrt{b^2-4ac}}{2a}&#xff0c;\sqrt{b^2-4ac}≥0 x2a−bb2−4ac ​​&…