分割结果可视化:怎么把标签mask轮廓显示在原图上

这篇具有很好参考价值的文章主要介绍了分割结果可视化:怎么把标签mask轮廓显示在原图上。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

训练完模型得到视盘视杯的分割结构之后,查看论文中的示例图,分割结果的显示为:
分割结果可视化:怎么把标签mask轮廓显示在原图上
下面是可视化过程中遇到的一些问题

问题1: 怎么可视化npy文件

cv2.imshow("ima", ima) # 需要两个参数 记住图片名称不可少
cv2.waitKey() # 等待时间 不写就是手动 0就是1s后会自动关闭

注意!!!
失败的原因 cv2显示的时候 图像必须是(h,w,c) 通道数在最后 否则出现报错
转换维度ima = image.transpose(1, 2, 0)
这里显示出来的图像颜色也很奇怪
查阅资料发现:
如果希望使用np.load读取图片,且使用cv2.imshow来输出正常照片的话,可以在输出时把颜色通道的顺序从BGR调整为RGB就行了。
opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式,所以将通道数进行对换一下即可

import cv2
 
image=np.load(image1)
ima = image.transpose(1, 2, 0) # 转化为(h,w,c)
ima_re = ima[:,:,::-1] # 转换成正常的颜色通道
cv2.imshow("ima", ima_re) # 需要两个参数 记住图片名称不可少
cv2.waitKey() # 等待时间 不写就是手动 0就是1s后会自动关闭

![[Pasted image 20221115145419.png|200]]![[Pasted image 20221115150023.png|200]]

问题2: 怎么保存这个jpg文件
这个Image就很正常了 注意的是.astype(np.uint8) 有时候会出现很奇怪报错就是因为他

from PIL import Image
file_name = file.split(".")[0] + "_" + file.split(".")[1] + '.jpg'
save_full_path = os.path.join(save_path, file_name)
img = Image.fromarray(res.astype(np.uint8), 'RGB')
img.save(save_full_path)

问题3: 怎么把分割的结果mask的轮廓在原图上显示
找了半天csdn终于成功得到我的分割结果图

注意: 使用下列方法之前我的mask是只有0-1两个值
1.将mask转化为 黑色背景,白色是分割mask
使用 图像二值化函数cv2.threshold函数
图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果(灰度值0:黑,灰度值255:白).
原因:在图像中除了目标物体和背景区域,还有噪声,这都会对于我们对图像的识别造成困扰,所以我们要通过图像二值化函数将多值的数字图像中直接提取出目标图像,也就是说设定一个阈值T,用T将图像的像素群一分为二。

cv2.thresholdcv2.threshold(src, thresh, maxval, type) → ret, thresh
在函数中:
src:表示原图
thresh:表示阈值
maxval:表示最大值
type:表示的是划分的时候使用的是什么算法,二值化的方法,常用值为0(cv2.THRESH_BINARY)
ps:大于阈值就是最大值,小于阈值就是0 这里的阈值 要我们自己选择(我的mask是0-1,所以取了0.5)

第一个ret(得到的阈值值(这里是0.0)),第二个就是阈值化后的图像thresh。

出现问题:程序怎么也没反应,好像在运行但是又像卡住了

#错误写法:
ret, thresh = cv2.threshold(mask_dic, 0.5, 255, 0)
#正确写法
ret, thresh = cv2.threshold(mask_dic.astype(np.uint8), 0.5, 255, 0)

2.获取二值化后的mask的轮廓

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])
函数参数:
image:参数是寻找轮廓的图像;
mode:参数表示轮廓的检索模式,有四种(下方介绍的都是新的cv2接口):
cv2.RETR_EXTERNAL:表示只检测外轮廓
cv2.RETR_LIST:检测的轮廓不建立等级关系
cv2.RETR_CCOMP:建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE:建立一个等级树结构的轮廓。
method:轮廓的近似办法:
cv2.CHAIN_APPROX_NONE:存储所有的轮廓点,相邻的两个点的像素位置差不超过1

返回值:
cv2.findContours() 函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。
contour返回值:返回一个list,list中每个元素都是图像中的一个轮廓,用numpy中的ndarray表示。
hierarchy返回值:返回一个ndarray,其中的元素个数和轮廓个数相同。

contours, im = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  # 第一个参数是轮廓

3.在原图上画上刚刚找到的轮廓
cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)
第一个参数是指明在哪幅图像上绘制轮廓;image为三通道才能显示轮廓
第二个参数是轮廓本身,在Python中是一个list;
第三个参数指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓。后面的参数很简单。其中thickness表明轮廓线的宽度,如果是-1(cv2.FILLED),则为填充模式。

出现报错:
TypeError: Expected Ptrcv::UMat for argument ‘image’
原因是:
image的数据之间出了冲突,需要在某些地方调用.copy函数
把原图加上.copy即可 后续保存如上

如果是多个mask的只要类似重复的在画好了第一个mask轮廓图上继续画轮廓即可

ret, thresh = cv2.threshold(mask_dic.astype(np.uint8), 0.5, 255, 0)
contours, im = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  # 第一个参数是轮廓
res1=cv2.drawContours(ima.copy(), contours=contours, contourIdx=-1, color=(64,224, 208), thickness=1)

获得如下图像:
分割结果可视化:怎么把标签mask轮廓显示在原图上文章来源地址https://www.toymoban.com/news/detail-417179.html

到了这里,关于分割结果可视化:怎么把标签mask轮廓显示在原图上的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • PCL Visualizer可视化结果保存成图片、关闭可视化窗口

    内容: C++ PCLVisualizer可视化的结果保存成图片,并自动关闭可视化窗口。

    2024年02月13日
    浏览(36)
  • 三维重建 阈值分割 3D可视化 医学图像分割 CT图像分割及重建系统 可视化编程技术及应用

    此系统实现了常见的VTK四视图,实现了很好的CT图像分割,可以用于骨骼,头部,肺部,脂肪等分割,,并且通过三维重建实现可视化。使用了第三方库 VTK,ITK 实现分割和生不重建。 窗口分为 (横断面)、冠状面、矢状面,和3D窗口;包含了体绘制和面绘制; 效果: CT分割

    2024年02月08日
    浏览(52)
  • 如何利用open3d对点云进行可视化并保存可视化结果

    来自open3d在GitHub上的这个issue 其中要用到的pcd的产生可以参考这篇帖子中用到的方式

    2024年02月10日
    浏览(47)
  • YOLOv5 使用tensorboard查看可视化训练结果

    1.1.找的models/yolo.py文件中,将最下面有关 Tensorboard 的注释打开 2.进入项目根目录 比如你训练的是第20个版本,那么 tensorboard --logdir=./runs/train/exp20 就可以查看当前训练的可视化结果了 3.通过浏览器查看可视化训练结果

    2024年02月16日
    浏览(51)
  • 关于图像分割项目的可视化脚本

    之前实现了目标检测和图像分类任务的可视化脚本,本章将最后一个分割任务的可视化脚本实现 效果展示如下: 代码会在当前目录保存展示好的图片,从左到右依次为,原图、mask图、mask覆盖在原图的掩膜图 关于目标检测的可视化: VOC:关于目标检测任务中,XML(voc格式)标

    2024年01月24日
    浏览(31)
  • mmdetection3d可视化多模态模型推理结果

    参考文献: 带你玩转 3D 检测和分割 (三):有趣的可视化 - 知乎 (zhihu.com) Welcome to MMDetection3D’s documentation! — MMDetection3D 1.0.0rc4 文档 让我们看一下ChatGPT的回答[手动狗头]: mmdetection3D是基于PyTorch框架的3D目标检测工具包,它是mmdetection的3D扩展版本。它提供了一个灵活且高效的

    2024年02月16日
    浏览(41)
  • 【Open3D可视化——添加标签】:如何在Open3D的可视化窗口中添加文字标签?

    【Open3D可视化——添加标签】:如何在Open3D的可视化窗口中添加文字标签? Open3D是一个基于Python语言开发的跨平台开源工具包,主要用于三维数据处理和可视化。在进行三维数据可视化过程中,往往需要在场景中添加标签来标识物体、点云等信息。本文将介绍如何在Open3D的可

    2024年02月11日
    浏览(71)
  • 【R语言】——基因GO/KEGG功能富集结果可视化(保姆级教程)

    上期“原来基因功能富集分析这么简单”介绍如何使用DAVID在线分析工具对基因进行GO/KEGG功能富集分析。本期则介绍使用R语言ggplot包对DAVID在线分析工具所获得的基因GO/KEGG功能富集结果进行可视化。 1 数据准备 数据输入格式(xlsx格式): 注:DAVID导出来的“%”这列为“Ge

    2024年02月13日
    浏览(40)
  • 使用 Scrapy 和 Selenium 爬取 Boss 直聘职位信息(可视化结果)

    在本博客中,我们将介绍如何使用 Scrapy 和 Selenium 来爬取 Boss 直聘 网站上的职位信息。Boss 直聘是一个广受欢迎的招聘平台,提供了大量的职位信息,以及公司和 HR 的联系信息。通过本文的指南,你将学会如何创建一个爬虫来抓取特定城市的 Python 职位信息。 在这个示例中,

    2024年02月08日
    浏览(42)
  • 带你玩转 3D 检测和分割 (三):有趣的可视化

    小伙伴们好呀,3D 检测和分割系列文章继续更新啦,在第一篇文章中我们带领大家了解了整个框架的大致流程,第二篇文章我们给大家解析了 MMDetection3D 中的坐标系和核心组件 Box,今天我们将带大家看看 3D 场景中的可视化组件 Visualizer,如何在多个模态数据上轻松可视化并且

    2023年04月21日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包