python打造光斑处理系统8:点击交互裁切

这篇具有很好参考价值的文章主要介绍了python打造光斑处理系统8:点击交互裁切。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

光斑处理:python处理高斯光束的图像
光斑处理系统:

  • 程序框架🌟打开图像🌟参数对话框/伪彩映射🌟裁切ROI
  • 光强分布🌟高斯拟合🌟沿割线的灰度分布

动作注册

此前在图像裁切时,希望有一种点击模式,可以将鼠标点击的两个点框选起来。后来,在光斑分布时,也希望点击两个点,然后将两点连线所在区域的强度绘制出来。为了实现这个功能,需要实现点击交互。

在matplotlib的tkinter画布中,提供了mpl_connect可以注册鼠标动作,所以可在AnaFacula的初始化代码中,插入此函数

        # 前面是self.canvas.get_tk_widget().pack(...
        self.canvas.mpl_connect('button_press_event',
                                self.on_button_event)

        # 后面是self.toolbar = NavigationToolbar2Tk(...

鼠标响应函数

考虑到这种交互并非实时需要的,只有在进入click模式,其返回的数值才有意义,所以需要一个全局变量来标识点击是否有效。另一方面,这些返回的数值需要进行存储,为此需要新建一个全局变量。

故而先在init_param函数中添加两个全局变量。

        self.xyLst = []
        self.btnFlag = 'void'

并且,btnFlag至少有三种模式,void表示什么也不做,当处于裁切点击时,为’cut’;当处于分布点击时,状态是’dist’。

然后设计点击函数的功能,点击两次图像时,激活相关的功能,若模式为"cut",则进行切割,若模式为"dist",则调用线段绘制函数。调用之后,释放保存的点,并将btnFlag重置为"void"。

    def on_button_event(self,evt):
        if self.btnFlag == "void":
            return
        self.xyLst.append([evt.xdata,evt.ydata])
        if len(self.xyLst) <2 :
            return
        arr = np.sort(self.xyLst,0).astype(int)
        if self.btnFlag == "cut":
            self.cutPara['xStart'],  self.cutPara['yStart'] = arr[0]
            self.cutPara['xEnd'], self.cutPara['yEnd']      = arr[1]
            self.imgCut()
        elif self.btnFlag == "dist":
            self.drawLine(self.xyLst[0], self.xyLst[1])
        self.btnFlag = "void"
        self.xyLst = []

然后,回到img_cut函数,为click模式添加功能

        elif cutPara['mode'] == 'click':
            self.btnFlag = "cut"
            return

img_distri函数亦然

        elif distriPara['mode'] == "click":
            self.btnFlag = "dist"
            return

测试其裁切功能,效果如下

python打造光斑处理系统8:点击交互裁切,本科生实验,python,交互,鼠标点击交互,matplotlib,tkinter

线段绘制

在交互函数中,引用了drawLine,用于绘制光斑图像中任意两点连线中的灰度值分布,下面就来实现这个函数。首先,模仿割线均分的函数,做一个已知起止点而计算线上灰度值的函数,代码如下,由于和disByOneDeg逻辑相似,故不再赘述。

def distByStartEnd(img,start,end):
    r = np.arange(np.sqrt(np.sum((np.array(start)-end)**2)))
    x = np.linspace(start[0],end[0],len(r))
    y = np.linspace(start[1],end[1],len(r))
    xL,yD = np.floor([x,y]).astype(int)
    xR,yU = xL+1,yD+1

    xDL,xDR = 1-(x-xL),1-(xR-x)
    yDD,yDU = 1-(y-yD),1-(yU-y)

    px = img[yU,xL]*xDL*yDU+img[yU,xR]*xDR*yDU+\
         img[yD,xL]*xDL*yDD+img[yD,xR]*xDR*yDD

    return [r,px]

最后,线段绘制函数如下

    def drawLine(self, st, ed):
        r, px = distByStartEnd(self.img, st, ed)

        self.fig.clf()
        ax = self.fig.add_subplot(121)
        ax.imshow(self.img)
        ax.plot([st[0],ed[0]], [st[1], ed[1]], lw=1, color='r')

        ax = self.fig.add_subplot(122)
        ax.plot(r, px)
        self.fig.tight_layout()
        self.canvas.draw()

运行结果如下,这个函数在一个图窗中绘制了两个子图,左图展现了刚刚点击的两点在图像上的连线,右侧表示这条红线上的灰度值。

python打造光斑处理系统8:点击交互裁切,本科生实验,python,交互,鼠标点击交互,matplotlib,tkinter文章来源地址https://www.toymoban.com/news/detail-837050.html

到了这里,关于python打造光斑处理系统8:点击交互裁切的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二维码智慧门牌管理系统升级,打造高效事件处理流程

    随着城市化的不断推进,城市管理面临越来越多的挑战。为了更好地解决这些问题,许多城市已经开始采用二维码智慧门牌管理系统。这个系统不仅可以提高城市管理的效率,还可以让市民更加方便快捷地了解城市的相关信息。然而,随着城市管理需求的不断增加,这个系统

    2024年02月07日
    浏览(44)
  • 解密Spring MVC异常处理:从局部到全局,打造稳固系统的关键步骤

    😀前言 在现代软件开发中,异常处理是不可或缺的一部分,它能够有效地提高系统的稳定性和健壮性。在Spring MVC框架中,异常处理机制起着至关重要的作用,它允许开发者在程序运行过程中捕获、处理和报告异常,从而保障用户体验和系统可靠性。本文将带您深入探索Spr

    2024年02月10日
    浏览(44)
  • Flutter中系统Emoji通过substring裁切后无法识别导致渲染错误

    在发布文章的时候,有标题和内容,标题可为空,在没有标题的情况下,截取部分内容当作标题。 内容列表显示的时候,某些特殊的情况下(并不重要),我们就需要裁切文章标题。 当文章标题中有文字 + 系统自带的 emoji 的时候,我们去裁切标题就会出现无法识别渲染出来

    2024年02月09日
    浏览(52)
  • 用 Python 打造 AIGC 的「操作系统」

    carefree0910/carefree-drawboard: 🎨 Infinite Drawboard in Python (github.com) https://github.com/carefree0910/carefree-drawboard 最近,AIGC 可谓是大火而特火,然而现在大家一般都在用 Gradio / Streamlit 写 demo,一方面无法作为企业级产品去服务客户,另一方面也感觉比较东一块西一块,很难形成“合力”

    2024年02月09日
    浏览(36)
  • python opencv+tkinter 使用tkinter实现交互式图像处理工具

    tkinter 基本控件与使用 我们将学习如何使用Tkinter包编写一些图形用户界面程序。Tkinter是Python的一个标准包,因此我们并不需要安装它。我们将从创建一个窗口开始,然后我们在其之上加入一些小组件,比如按钮,复选框等,并使用它们的一些属性。话不多说,让我们开始吧

    2024年02月10日
    浏览(93)
  • C语言与硬件交互:中断处理、低级I/O操作与系统调用(一)

    目录 一、引言 二、中断处理 定义与作用 C语言中的中断处理机制 实例分析 中断处理注意事项 C语言,作为一种兼具底层控制力与较高抽象层次的编程语言,凭借其简洁明了的语法、高效的执行效率以及与硬件资源的紧密联系,在嵌入式系统、操作系统开发、实时控制、设备

    2024年04月14日
    浏览(33)
  • 【微信小程序】通过绑定点击事件来实现点击交互

    在微信小程序中,可以通过绑定点击事件来实现点击交互。以下是点击事件的实现步骤: 在WXML文件中,找到需要绑定点击事件的元素,例如按钮、图片等。 在该元素上添加 bindtap 属性,并指定一个对应的事件处理函数,例如: 在对应的页面或组件的JS文件中,定义事件处理

    2024年02月14日
    浏览(61)
  • Python:打造智能家居控制系统(内附完整源码)

    Python:打造智能家居控制系统(内附完整源码) 随着人工智能技术和互联网技术的不断发展,智能家居逐渐成为人们生活中不可或缺的一部分。本文将介绍如何使用Python编程语言来打造一个基于语音识别的智能家居控制系统。 首先,我们需要准备一些硬件设备,包括树莓派

    2024年02月11日
    浏览(55)
  • OpenCV-Python中的图像处理-GrabCut算法交互式前景提取

    cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode=…) img:输入图像 mask:掩模图像,用来确定那些区域是背景,前景,可能是前景/背景等。 可以设置为: cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,或者直接输入 0,1,2,3 也行。 rect :包含前景的矩形,格式为

    2024年02月12日
    浏览(47)
  • Python-OpenCV中的图像处理-GrabCut算法交互式前景提取

    cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode=…) img:输入图像 mask:掩模图像,用来确定那些区域是背景,前景,可能是前景/背景等。 可以设置为: cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,或者直接输入 0,1,2,3 也行。 rect :包含前景的矩形,格式为

    2024年02月13日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包