尝试修改LabelImg,将以对顶角画框改成以对角线相交点向四周画框

缩小代码位置范围

  • 打断点,开始调试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    发现没啥用,点来点去控制台一点反应都没有
    在这里插入图片描述
    在这里插入图片描述
    还是老老实实看源码吧。。。。。

貌似找不到程序入口,哎,还是我技术太渣了。。。。

把断点打在最前面调试:
在这里插入图片描述
卧槽,,没法调试啊!!一点调试没一会程序就直接结束了。。。。

只能一个包一个包去看它们的作用了。。
在这里插入图片描述

首先:
codecs:貌似用来做编码转换的
distutils.spawn:貌似是用来打包发布自定义python包的
os.path:貌似是用来操作路径的
platform:貌似是用来获取操作系统的信息的
re:正则化表达式
sys:有很多貌似比较有用的功能
subprocess:用于fork子进程,并运行外部程序
functools.partitial:貌似是用来包装函数的,让想要添加默认值的函数调用更加方便
collections.defaultdict:貌似这玩意有点复杂,不好解释
PyQt5:非常方便的图形界面编程库
sip:方便地为C和C++库创建Python绑定。它最初是为了创建PyQT,用于Qt工具包的Python绑定,但是可以用来为任何C或C++库创建绑定。

顺着程序往下看:

看作者写的这个shape模块有点像处理我们的框的模块啊,先打个标记先@@@@
在这里插入图片描述

  • 从libs.labelFile导包
    又发现一个:yolo_io.py
    在这里插入图片描述
    这里面一定能够找到对捕捉鼠标事件的处理函数,到时多看看

对缩小的范围查找代码

前面的import看得差不多了,接下来着重看shape.pyyolo_io.py

shape.py

20200403

shape.py和yolo_io.py貌似也没啥好看的,看了一些PyQt5基础,在QWidget类中看到了按住鼠标拖动的触发事件mouseMoveEvent(),我们是否能直接搜索这个方法找到需要修改代码的未知呢?试试

调试了以下,貌似不是?程序启动时就会调用mouseMoveEvent()函数了

问了下韦工,他说是在handleDrawing()函数里

20200409

修改了以下handleDrawing()里的代码,现在能够把框画成这样子了,但是初始点和实时绘制还不知道怎么处理

# Dontla 20200408 重写handleDrawing()函数
    # pos就是当前像素点坐标
    def handleDrawing(self, pos):
        if self.current and self.current.reachMaxPoints() is False:  # 如果框存在且没有越界(这个是画结果的)
            # print(self.current) # <libs.shape.Shape object at 0x00000200B63D0E10>
            initPos = self.current[0]
            # print(self.current[0])  # PyQt5.QtCore.QPointF(542.9382716049383, 201.8271604938272)    # 方框框的绘制初始点
            minX = initPos.x()
            minY = initPos.y()
            # print(minX, minY)  # 541.9382716049383 199.8271604938272
            targetPos = self.line[1]  # 方框的绘制结束点
            maxX = targetPos.x()
            maxY = targetPos.y()
            # print(maxX, maxY)
            # self.current.addPoint(QPointF(maxX, minY))
            self.current.addPoint(QPointF(maxX, 2 * minY - maxY))
            self.current.addPoint(targetPos)
            self.current.addPoint(QPointF(2 * minX - maxX, maxY))
            self.finalise()
        elif not self.outOfPixmap(pos):  # 如果框不存在且当前点没有在画布之外(这个是画实时的)
            self.current = Shape()
            # self.current.addPoint(pos)    # origin
            self.current.addPoint(QPointF(pos.x(), pos.y()))  # Dontla
            # self.line.points = [pos, pos]   # origin
            self.line.points = [QPointF(pos.x(), pos.y()), QPointF(pos.x(), pos.y())]  # Dontla
            self.setHiding()
            self.drawingPolygon.emit(True)
            self.update()

在这里插入图片描述
在这里插入图片描述

后开在这加上这句之后就能将结果准确绘制了,但是实时显示还是没法达到预期

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

尝试修改这句canvas.py里handleDrawing()函数里的这句

在这里插入图片描述

情况1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

情况2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

情况3

在这里插入图片描述
在这里插入图片描述
强制绘制方形失效了,可能是有的地方没弄好
在这里插入图片描述

情况4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

虽然测试得一脸懵逼,但是还是能推断得出个大概:
在这里插入图片描述
这个应该是初始化绘框射线用的,两个点分别是初始化的射线起点和终点,只有设置起点是有用的,设置终点是没有用的

尝试修改canvas.py里mouseMoveEvent()函数里的这句

在这里插入图片描述
这个是可以修改绘制的目标点的坐标的
在这里插入图片描述

20200420

这一次我决定反过来,从将坐标写入文件的地方从后往前询

ctrl+shift+f项目全局搜索,搜索.write
在这里插入图片描述
应该就是箭头所指的这句没错了

在yolo_io.py文件里

一步步往上询:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后跳到了labelFile.py文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后又跳到labelImg.py文件里来了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

又跳到canvas.py文件来了
在这里插入图片描述
这TM也太多了吧,筛选筛选先
在这里插入图片描述
首先:
在这里插入图片描述
貌似这样也不好看,不如对shapes变量添加一个监视
在这里插入图片描述
在这里插入图片描述

监控太复杂了,也是乱七八糟的,还不如一个一个看

在这里插入图片描述
看过了,好像没啥,下一个

在这里插入图片描述
再看其他的

看是不是这个

在这里插入图片描述
在这里插入图片描述
真的,太多了,只有初始信号和末尾写入的地方是确定的,其余的地方就像黑箱一样

我去,我有点想放弃了,这破玩意

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值