python打造光斑处理系统2:打开图像和默认图像

文章目录

    • 打开图像
    • 默认图像

光斑处理:python处理高斯光束的图像
光斑处理系统:程序框架

打开图像

光斑图像的本质是光强在空间中的分布,而有的时候,通过CCD拍到的图像往往存成虚假的RGB格式,所以在打开图像时,需要判断其维度,如果有多个通道,需要将其转换为单个通道的灰度图像。

在我们的框架中,img_open实现打开图像的功能,考虑到在打开图象时需要进行文件交互,所以引入文件对话框。下面代码就是对img_open的实现,需要注意,这是一个类的方法,复制到类中时需要注意缩进。

from tkinter.filedialog import askopenfilename

# class AnaFacula():
# ...
    def img_open(self):
        name = askopenfilename(title="请打开图片")
        if name=="":
            return
        img = plt.imread(name).astype(float)
        if len(img.shape)==3:
            img = img[:,:,0]
        self.oriImg = img
        self.img = img + 0
        self.imgShow()

其中,self.oriImg是原图,self.img是经过处理后的图像,之所以加上一个0,目的是实现深拷贝的效果,使之与self.oriImg指向不同的内存区域。

点击开始按钮,效果如下

在这里插入图片描述

默认图像

在打开软件的时候,图窗中有一张默认图片,目前这张图片并不是光斑,而是通过随机数生成的一个噪声。

为了让这个程序更加友好,初始化时最好显示一张可供处理的光斑图像,一种比较简单的方案,就是直接将图像的相对路径引入初始化函数,但这样做有个问题,即对程序打包之后,这张图片就需要作为程序包外面的单个文件,很容易遗失,使得程序中的相对路径失效,进而导致程序崩溃。

一种比较优雅的方式,是将图像的数据封装到一个.py文件中,然后通过import的方式导入。

为此,最简单的方法,就是打开一张图像后,将其所有数值打印出来,为其赋予一个变量之后,再存储为文件。

import matplotlib.pyplot as plt

path = 'test.bmp'

def saveImgAsTxt(path):
    img = plt.imread(path).astype(int)
    if len(img.shape)==3:
        img = img[:,:,0]
    ds = []
    for row in img:
        data = ','.join([str(c) for c in row])
        ds.append(f"[{data}]")
    s = 'backImg = [' + ',\n'.join(ds) + ']'
    with open('backImg.py', 'w') as f:
        f.write(s)

saveImgAsTxt(path)

其内容大致如下

在这里插入图片描述
打眼看去,基本每一行都是 3 , 3 , 3 , 3 , ⋯ 3,3,3,3,\cdots 3,3,3,3,,或者偶尔有一些 4 4 4,这些都是图像的背底。

接下来修改self.oriImg的初始化方法

from backImg import backImg

class AnaFacula():
    def __init__(self):
        # 中间代码省略
        # 初始化图像
        self.oriImg = np.array(backImg, dtype=float)
        self.img_ori()

从而打开软件后,显示情况如下

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超越人类上限的策划:百度输入法在候选词区域植入广告

一位 V2EX 用户最新发帖称,百度输入法的最新版本中引入了一个新功能,将广告直接植入到候选词区域。 具体表现为,当用户输入某些关键词时,候选词区域会显示与输入内容相关的广告链接。例如,用户输入“招商”时&#xf…

Elasticsearch:如何为 Elastic Stack 配置 AI Assistant

了解并安装 Elastic AI Assistant Elastic 推出了 Observability AI Assistant,这是一款利用生成式 AI 来增强你的 Observability 体验的强大工具。 该 AI 助手由 OpenAI 或 Azure OpenAI 服务的连接器提供支持,可带来上下文洞察和聊天功能,…

企业如何遵守数据安全法规进行SAP数据脱敏处理?

为什么谈SAP数据脱敏? SAP进入中国市场超过30年,作为一个典型的德国思维的产品,我们很难找到另一个市值这么大的软件,在过去的几十年中,一直活的这么滋润,没有太多的挑战,而且软件本身的变化肉眼…

Java-Swing

Swing 课程:14、Swing之JFrame窗体_哔哩哔哩_bilibili 一.JFrame和容器 构造方法 Constructor and DescriptionJFrame() 构造一个最初不可见的新框架。 JFrame(GraphicsConfiguration gc) 在屏幕设备的指定 GraphicsConfiguration中创建一个 Frame和一个空白标题。…

Linux系统——正则表达式

有一段时间本机访问量过高,如何查看日志提取出访问量前十的信息 1.使用提取命令(cut、awk、sed)提取出ip地址的那一列 2.使用sort按数字排序,将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最…

使用OpenCV实现一个简单的实时人脸跟踪

简介: 这个项目将通过使用OpenCV库来进行实时人脸跟踪。实时人脸跟踪是一项在实际应用中非常有用的技术,如视频通话、智能监控等。我们将使用OpenCV中的VideoCapture()函数来读取视频流,并使用之前加载的Haar特征级联分类器来进行人脸跟踪。 …

[React源码解析] Fiber

在React15及以前, Reconciler采用递归的方式创建虚拟Dom, 但是递归过程不可以中断, 如果组件的层级比较深的话, 递归会占用线程很多时间, 那么会造成卡顿。 为了解决这个问题, React16将递归的无法中断的更新重构为异步的可中断更新, Fiber架构诞生。 文章目录 1.Fiber的结构2…

22.云原生之GitLab CICD实战及解析【干货】

云原生专栏大纲 文章目录 准备工作gitlab-ci.yml流水线mven打包项目制作并推送镜像kaniko方式docker方式 部署到k8s验证执行情况 GitLab Runner k8s执行器工作流程注册配置kubernetes runnerkubernetes runner配置通过修改 Pod 规范为每个构建作业创建一个 PVC自定义卷装载持久…

C++ Qt开发:运用QJSON模块解析数据

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson组件的实现对JSON文本的灵活解析…

【python】求矩阵的特征值和特征向量

使用np.linalg.eig同时求特征值和特征向量 import numpy as np#输入矩阵 A np.array([[1, 1/2, 1/6, 1/9],[2, 1, 1/3, 1/5],[6, 3,1,1/2],[9, 5,2,1]])#求解特征值和其对应的特征向量 eigval,eigvec np.linalg.eig(A) for i in range(len(eigval)):print(f特征值&#xff1a…

Flask使用Jinja2渲染模版使用变量实战

前言: Flask 使用 Jinja2 作为其默认模板引擎,这意味着您可以直接在 Flask 应用程序中使用 Jinja2 模板。您可以创建模板文件,然后在视图函数中渲染这些模板,将动态数据传递给模板进行渲染,并最终生成最终的 HTML 页面…

349. 两个数组的交集(力扣LeetCode)

文章目录 349. 两个数组的交集题目描述数组解题set容器解题该思路数组版解题 349. 两个数组的交集 题目描述 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入&a…

MATLAB知识点:创建MATLAB的脚本

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第2章 在实际应用中,直接在命令行窗口中输…

Phoncent博客,探索Rie Kudan的GPT创作之举

近日,大家都在谈论日本作家Rie Kudan,她凭借其小说《东京共鸣塔》("Tokyo-to Dojo-to")荣获了日本极具声望的芥川奖。这本小说引起了广泛的讨论和思考,因为令人惊讶的是,Kudan在其中直接引用了人…

伊恩·斯图尔特《改变世界的17个方程》毕达哥拉斯定理笔记

它告诉我们什么? 直角三角形的三个边之间有什么关系。 为什么重要? 它提供了几何和代数之间的重要联系,使我们能够根据坐标计算距离。它也催生出了三角学。 它带来了什么? 测绘、导航,以及较近代出现的狭义和广义相对论…

solr的原理是什么

1 Java程序里如果有无限for循环的代码导致CPU负载超高,如何排查? 排查Java程序中由于无限循环导致的CPU负载过高的问题,可以按照以下步骤进行: 资源监控: 使用系统命令行工具(如Linux上的top或htop&#xf…

Pytest 识别case规则

一、Python测试框架,主要特点有以下几点: 简单灵活,容易上手;支持参数化;能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytestrequests…

JavaWeb中的Filter(过滤器)和 Listener(监听器)

提示:这两个东西听起来似乎很难,实际上是非常简单的,按照要求写就行了,一定不要被新名词给吓到了。 JavaWeb中的Filter(过滤器) 一、Filter(过滤器)1.如何编写 Filter2.Filter 中的细…

翻译: GPT-4 Vision征服LLM幻觉hallucinations 升级Streamlit六

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三翻译: GPT-4 Vision从图像转换为完全可编辑的表格 升级St…

探索Pyecharts:绘制多彩日历图的艺术与技巧

Pyecharts绘制多种炫酷日历图参数说明代码实战 导言 在数据可视化领域,日历图是一种直观展示时间和数据关系的方式。Pyecharts是一个基于Echarts的Python库,可以方便地绘制各种图表,包括炫酷的日历图。本篇博客将介绍Pyecharts中绘制多种炫…