使用python开发的闭运算调试器
使用python开发的开运算调试器
- 简介
- 效果
- 代码
简介
用来调试闭运算效果的小工具,滑动条可以控制滤波核的大小,用来查看不同滤波核下的闭运算效果。
效果
代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QFileDialog, QSlider
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt
import cv2
import numpy as npclass ImageDisplayWidget(QWidget):def __init__(self):super().__init__()self.initUI()self.image = Nonedef initUI(self):self.main_layout = QVBoxLayout()self.resize(820, 620)self.open_button = self.create_button("打开图片", self.open_image)self.img_win = QWidget()img_win_layout = QHBoxLayout()self.img_win.setLayout(img_win_layout)self.orgin_img_label = QLabel()self.image_label = QLabel()self.add_image_view(img_win_layout, "原图", self.orgin_img_label)self.add_image_view(img_win_layout, "处理后的图", self.image_label)self.slider = self.create_slider(self.process_image)self.slider2 = self.create_slider(self.process_image)self.slider_value_label = QLabel("滤波核大小: 0x0")controls_layout = QHBoxLayout()self.add_control(controls_layout, "滤波核大小(ksize):", self.slider, self.slider_value_label)controls_layout2 = QHBoxLayout()self.main_layout.addWidget(self.open_button)self.main_layout.addWidget(self.img_win)self.main_layout.addLayout(controls_layout)self.main_layout.addLayout(controls_layout2)self.setLayout(self.main_layout)self.setWindowTitle('闭运算调试器')self.set_common_style(self.slider_value_label)# self.set_common_style()self.show()def add_image_view(self, layout, label_text, image_label):image_view_layout = QVBoxLayout()name_label = QLabel(label_text)name_label.setAlignment(Qt.AlignCenter)image_view_layout.addWidget(image_label, alignment=Qt.AlignCenter)image_view_layout.addWidget(name_label, alignment=Qt.AlignCenter)layout.addLayout(image_view_layout)self.set_common_style(name_label)def create_button(self, text, clicked_slot):button = QPushButton(text)button.clicked.connect(clicked_slot)self.set_common_style(button)return buttondef create_slider(self, value_changed_slot):slider = QSlider(Qt.Horizontal)slider.setMinimum(1)slider.setMaximum(100)slider.setSingleStep(2)slider.valueChanged.connect(value_changed_slot)self.set_slider_style(slider)return sliderdef add_control(self, layout, label_text, slider, value_label):control_label = QLabel(label_text)layout.addWidget(control_label)layout.addWidget(slider)layout.addWidget(value_label)self.set_common_style(control_label)def set_common_style(self, label):label.setStyleSheet(""" QLabel { font-family: '微软雅黑'; font-size: 12pt; color: red; }QPushButton { font-family: '微软雅黑'; font-size: 12pt; color: red; } """)def set_slider_style(self, slider):slider.setStyleSheet(""" QSlider::groove:horizontal { background: #999999; height: 8px; margin: 0; border-radius: 4px; } QSlider::handle:horizontal { background: red; border: 1px solid #999999; width: 16px; height: 16px; margin: -7px 0; /* handle is placed in the middle */ border-radius: 8px; } QSlider::add-page:horizontal { background: #FF0000; /* This is the red color from your font color */ } QSlider::sub-page:horizontal { background: #555555; /* You can choose a different color for the filled part */ } """)def open_image(self):self.filename, _ = QFileDialog.getOpenFileName(self, '打开图片', '.', '图片文件 (*.png *.jpg *.jpeg *.bmp)')if self.filename:self.image = cv2.imread(self.filename)or_img = cv2.cvtColor(self.image, cv2.COLOR_BGR2RGB)h, w, ch = or_img.shapebytes_per_line = ch * wq_img = QImage(or_img.data, w, h, bytes_per_line, QImage.Format_RGB888)pixmap = QPixmap.fromImage(q_img)if pixmap.width() > 600 or pixmap.height() > 600:pixmap = pixmap.scaled(600, 600, Qt.KeepAspectRatio, Qt.SmoothTransformation)self.orgin_img_label.setPixmap(pixmap)self.process_image()def process_image(self):if self.image is None:returnkernel_size = self.slider.value()if kernel_size %2 == 0:passelse:self.slider_value_label.setText(f"矩形核大小: {kernel_size}x{kernel_size}")kernel = np.ones((kernel_size, kernel_size), np.uint8)processed_image = cv2.morphologyEx(self.image, cv2.MORPH_CLOSE, kernel)processed_image = cv2.cvtColor(processed_image, cv2.COLOR_BGR2RGB)h, w, ch = processed_image.shapebytes_per_line = ch * wq_img = QImage(processed_image.data, w, h, bytes_per_line, QImage.Format_RGB888)pixmap = QPixmap.fromImage(q_img)if pixmap.width() > 600 or pixmap.height() > 600:pixmap = pixmap.scaled(600, 600, Qt.KeepAspectRatio, Qt.SmoothTransformation)self.image_label.setPixmap(pixmap)if __name__ == '__main__':app = QApplication(sys.argv)ex = ImageDisplayWidget()sys.exit(app.exec_())
相关文章:

使用python开发的闭运算调试器
使用python开发的开运算调试器 简介效果代码 简介 用来调试闭运算效果的小工具,滑动条可以控制滤波核的大小,用来查看不同滤波核下的闭运算效果。 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayou…...

一例Phorpiex僵尸网络变种的分析
概述 这是一例Phorpiex僵尸网络变种,通过NSIS打包,加载恶意dll(Flaminius.dll),读取dat文件(Preoral.dat),在内存解密并解压缩出一个Pe,创建同名傀儡进程并注入。通过可移动存储介质传播&#…...

PDF文件转换为CAD的方法
有时候我们收到一个PDF格式的设计图纸,但还需要进行编辑或修改时,就必须先将PDF文件转换回CAD格式。分享两个将PDF转换回CAD的方法,一个用到在线网站,一个用到PC软件,大家根据情况选择就可以了。 ☞在线CAD网站转换 …...

Java为什么会成为现在主流的编程语言
Java为什么会成为现在的主流语言 前言一、Java语言概述Java是什么为什么大多数人会选择从事Java为什么从事Java的工作者数量从年递减 二、Java语言的特点简单性面向对象分布式(微服务)健壮性安全性体系结构中立可移植性解释型高性能多线程动态性 三、Jav…...

动手学深度学习16 Pytorch神经网络基础
动手学深度学习16 Pytorch神经网络基础 1. 模型构造2. 参数管理1. state_dict()2. normal_() zeros_()3. xavier初始化共享参数的好处 3. 自定义层4. 读写文件net.eval() 评估模式 QA 1. 模型构造 定义隐藏层–模型结构定义前向函数–模型结构的调用 import torch from torch…...

前端无样式id或者class等来定位标签
目录: 1、使用背景2、代码处理 1、使用背景 客户使用我们产品组件,发现替换文件,每次替换都会新增如下的样式,造就样式错乱,是组件的文件,目前临时处理的话就是替换文件时删除新增的样式,但是发…...

机器人工具箱学习(三)
一、动力学方程 机器人的动力学公式描述如下: 式中, τ \boldsymbol{\tau} τ表示关节驱动力矩矢量; q , q ˙ , q \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙,q分别为广义的关节位置、速度和加速…...

华为OD机试 - CPU算力分配(Java 2024 C卷 100分)
华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…...

web前端框架设计第八课-表单控件绑定
web前端框架设计第八课-表单控件绑定 一.预习笔记 1.v-model实现表单数据双向绑定 2.搜索数据的实现 3.全选案例实现1—JQ方法 4.单选案例实现 5.数据级联(二级级联) 6.v-model中的修饰符 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药,…...

这三个网站我愿称之为制作答辩PPT的神
很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路,一窍不通。但这并不是你们的错,对于平时没接触过相关方面,第一次搞答辩PPT的人来说,这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…...

flutter开发实战-实现多渠道打包及友盟统计(亲测有效)
flutter开发实战-实现多渠道打包及友盟统计(亲测有效) 最近开发过程中,需要引入友盟进行统计服务。友盟统计还需要区分不同渠道的打开应用的情况,所以需要处理多渠道打包的问题。 一、引入友盟统计 在工程的pubspec.yaml中引入…...

JavaScript-JSON对象
JSON格式 JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会的一个子集,采用完全独立于编程语言的文本格式来存储和表示…...

【C语言】自定义类型之---结构体超详解(结构体的定义使用、指针结构体,内存对齐,......代码详解)
目录 前言: 一:结构体 1.1:什么是结构体? 1.2:结构体类型的声明 1.3:结构体变量的定义 1.4:结构体的内存对齐 1.5:结构体传参 二:位段 2.1:位段是什…...

【完美恢复】修复计算机中丢失emp.dll的多个详细方法
最近,在尝试运行某款游戏时,我遭遇了一个令人头痛的问题——“emp.dll文件丢失”。这个错误通常意味着游戏的某个关键文件没有被正确加载或已损坏。以下是我解决问题的步骤和一些心得体会,希望对遇到类似问题的玩家们有所帮助。 emp.dll是一…...

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略
暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP,在全世界有着广泛的玩家群体,更是在今年暴雪国服宣布回归之后,吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…...

WLAN技术
冲突域:连接在同一传输线缆上的所有工作站的集合,或者说是同一物理网段上所有节点的集合共同竞争网络资源形成的域叫冲突域。 在OSI模型中,冲突域被看作是第一层的概念,连接同一冲突域的设备有中继器、集线器(hub&…...

维修AB罗克韦尔工控机 PanelView 900 2711-T9C8 SER C 触摸屏人机界面
可视化和 HMI 解决方案可帮助您满足生产力、创新和全球化需求。为电子操作员界面终端、分布式客户端/服务器 HMI 和信息软件提供了一致的外观和感觉。编程工具和高级软件应用程序包括远程访问和数据分析,可加速开发并提高效率。 图形终端 图形终端提供各种尺寸、操…...

334_C++_std::bind中使用shared_from_this()
std::bind(&HttpClient::getPwd, shared_from_this(), std::placeholders::_1, std::placeholders::_2);[ HttpClient继承自NetObj,NetObj是父类,NetObj受到std::shared_pt...

【Python】防御性编程入门
1. 前言 防御性编程指的是为了防止代码泄露后被竞品公司窃取技术,使用一种较高级的明文加密编程方式。也可以当做一种带解密性质的时间胶囊,锻炼程序员自己的记忆能力、读代码能力等。 2. 案例分析 2.1 import Import里面可以多取一些喜欢的名字&#…...

无线麦克风哪个品牌音质最好?热门无线麦克风品牌推荐
这段时间短视频行业兴起,很多人都开始尝试步入自媒体,不过想要自己的视频内容更出色、更吸引人,好的音频设备肯定是必不可少的,而麦克风就是其中的一种。麦克风的好坏也将决定了一个视频的质量与完整性等等,如果我们作…...

粒子奇观:用Processing创造宇宙级的动态效果
前言: 👋 今天,我们将一起探索宇宙的奥秘,不是在星空下,而是在Processing的代码世界中。这是我们的第八篇文章,我们将深入粒子系统的神奇领域,学习如何创造出令人惊叹的动态效果。 粒子系统:构建动态世界的基石 🔨 粒子系统是计算机图形学中用于模拟复杂自然现象…...

Filesystem Fragmentation on Modern Storage Systems——论文泛读
TOCS 2023 Paper 论文阅读笔记整理 问题 文件系统碎片是计算机系统随着时间的推移而变慢的主要原因之一。以前认为,碎片化对硬盘驱动器(HDD)等旋转存储设备有害,但不影响固态驱动器(SSD),因为…...

如何同步管理1000个设备的VLAN数据?
什么是VLAN? VLAN,也就是虚拟局域网,是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中,一个企业级交换机一般是24口或者是48口,连接这些接口的终端在物理上形成一个广播域。广播域过大,就会导…...

【谷粒商城】01-环境准备
1.下载和安装VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 傻瓜式安装VirtualBox 2.下载和安装Vagrant官方镜像 地址:https://app.vagrantup.com/boxes/search 傻瓜式安装 验证是否安装成功 打开CMD,输入vagrant命令,是否…...

2024深圳杯数学建模C题参考论文24页+完整代码数据解题
一、问题研究 24页参考论文: 【编译器识别】2024深圳杯C题24页参考论文1-3小问完整解题代码https://www.jdmm.cc/file/2710545/ 为了回答这些问题,我们需要进行一系列的编译实验、分析编译结果,并构建判别函数。以下是对这些问题的初步分析…...

用go语言写一个代码,加班就自动给老婆发信息,下班自动提醒的代码
文章推荐 1 作为程序员,开发用过最好用的AI工具有哪些? 2 Github Copilot正版的激活成功,终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手,帮助你提高写代码效率 5 Jetbrains的a…...

Spring-Cloud 微服务
1. 微服务架构 1.1 单体应用架构---内部项目【OA WMS等】 将项目所有模块(功能)打成jar或者war,然后部署一个进程 优点: 1:部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。 2:技术单一:项目不需要复杂的技术栈,往往一套熟悉的…...

python数据分析——数据可视化(图形绘制基础)
数据可视化(图形绘制基础) 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制plot示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线图的…...

必背!!2024年软考中级——网络工程师考前冲刺几页纸
距离软考考试的时间越来越近了,趁着这两周赶紧准备起来 今天给大家整理了——软考网络工程师考前冲刺几页纸,都是核心重点,有PDF版,可打印下来,每天背一点。 计算机总线分类 ①总线的分类:数据总线、地址总…...

html+js光标操作
光标设置id为username的字段 window.addEventListener("load", function() {document.getElementById("username").focus(); }); 光标在username的时候点击enter回车键的时候光标移动到id为password的input里面 document.getElementById("username…...