python - 如何在不扭曲尺寸的情况下连接图像蒙版的片段?
问题描述
我在试图测量的图像中有一个感兴趣区域的蒙版。但这些面具并不总是高质量的,有时我感兴趣的对象(无人机图像中的鲸鱼)来自多个图像片段,由几个像素分隔。所以我试图做一些膨胀和腐蚀操作来制作一个单一的蒙版,但是太多的膨胀会影响我的最终测量。有没有办法进行膨胀以连接形状,腐蚀以从膨胀中去除所有增加的周长/长度,但防止腐蚀产生两个不同的段?
这是我目前拥有的:
import cv2
# my_mask = output from Mask RCNN
plt.imshow(my_mask, cmap="gray")
plt.show()
mask_uint = np.array(my_mask, dtype=np.uint8)
kernel = np.ones((5,5), np.uint8)
dilation = cv2.dilate(mask_uint, kernel, iterations=5)
plt.imshow(dilation, cmap="gray")
plt.show()
erosion = cv2.erode(dilation, kernel, iterations=4)
plt.imshow(erosion, cmap="gray")
plt.show()
最后你可以看到它仍然是两个独立的部分,如果我做更少的侵蚀迭代,那么掩码就太宽了,我对掩码的测量也太扭曲了。
更新
我尝试更改我的系统以使用 opencv 的 minAreaRect() 函数来测量长度,这导致了一个干净的解决方案,但它增加了一个相当大的缓冲区,导致长度测量非常差。
解决方案
推荐阅读
- python - 在 Python 函数中,参数中的独立 * 是什么意思
- google-cloud-platform - 无法从 GCP Marketplace 部署 - 缺少有效的默认服务帐号
- c# - datagridview中的两个日期数据差异
- gitahead - 如何在 GitAhead 中暂存单行
- python - 卡在使用 keras.models 的 load_models 加载 facenet-keras 模型
- python - Python 3 - 如何将字符串中的每个字符拆分成一个列表,同时保持十进制数字不变?
- istio - 为 Istio ingress-gateway Loadbalancer 服务分配静态公共 IP
- node.js - 在查询结果中解析服务器未定义的列值
- r - 我怎样才能画出平均值?
- ios - Fyber 奖励视频和优惠墙 iOS