赞
踩
近半个月来,研究yolov8的segments部分,有一些小收获,分享给大家。
在探索这个算法的时候,有一个问题困扰了我很长时间。
,
前提:在输入图片的过程中,你给的图片格式可能不是统一的,比如说,有的图片是100*100、200*200、300*300,在给到网络计算后,会有一些操作改变图像的格式,给到一个较为统一格式比如640*480.而输出的时候,返回的仍然是你自己的(100*100、200*200、300*300)格式。
问题来了:算法的计算大部分是在统一格式上面计算的。
输出的结果不能直接在原格式上面改,不得不在统一格式上面更改,这就比较麻烦了
当然这个问题不仅在yolov8算法中,在很多视觉算法中都是存在的。
好啦,正题开始:
图一
- stone_info = {} # 这里存储所有的信息
- w = im0.shape[1] # width
- h = im0.shape[0] # height
- w1 = im.shape[3]
- h1 = im.shape[2]
- gain1 = min(w1 / w, h1 / h) # gain = old / new
-
- #segments是掩码的轮廓像素坐标
- segments123= result.masks.segments
-
- #cls_num是掩码的class代号
- cls_num = result.boxes.cls
-
- #掩码class代号对应的class名
- cls_name = result.names
-
- #掩码
- masks1 = result.masks.masks
- a = centroid(masks1,gain1)
图二
yolov8是计算是将所有的结果放在result中,可以在编译的过程中查看,当然,这些结果都是在统一格式上的结果。
上面的问题是计算的图像和输出图像格式的不统一,为了让问题更直观点,直接上图:
这张图先被压缩,之后鸭子就跑到那个蓝色的地方,so.....
解决这个问题的关键是什么呢,就是gain,在图二中有计算方法。
你获得的所有像素坐标都可以通过*gain获得在原图中的坐标。
boom!
我这表达能力欠缺.......唉
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。