如何解决图像分割和遮罩
需要协助完成简单的任务。我正在使用 LISC dataset,其中包含从外周血中获取的血液学图像和这些图形样本的手动地面实况分割掩码。任务如下:
结果应该是这样的(这些是通过 Mask R-CNN、GrabCut 和 OpenCV 的组合获得的——但不适合我目前正在进行的项目):
这是我目前得到的代码(来自 jupyter notebook):
%matplotlib inline
from sklearn.datasets import load_sample_images
from matplotlib import pyplot as plt
from matplotlib.pyplot import imread
import cv2
original = imread(r'D:\mask\1_original.bmp')
plt.imshow(original)
segmented = imread(r'D:\mask\1_mask.bmp',cv2.IMREAD_GRAYSCALE)
_,mask = cv2.threshold(segmented,thresh=180,maxval=255,type=cv2.THRESH_BINARY)
plt.imshow(segmented)
我不知道为什么图像改变了颜色,因为原始蒙版看起来像这样(只有黑色和灰色):
这是我用于最终结果的代码,但是一旦应用蒙版,颜色就会扭曲并且与原始代码不同,这就是我现在试图修复但无济于事的原因:>
%matplotlib inline
import matplotlib.pyplot as plt
from matplotlib.pyplot import imread
import cv2
img_org = cv2.imread(r'D:\mask\1_original.bmp')
img_mask = cv2.imread(r'D:\mask\1_mask.bmp')
##Resizing images
img_org = cv2.resize(img_org,(400,400),interpolation = cv2.INTER_AREA)
img_mask = cv2.resize(img_mask,interpolation = cv2.INTER_AREA)
for h in range(len(img_mask)):
for w in range(len(img_mask)):
if img_mask[h][w][0] == 0:
for i in range(3):
img_org[h][w][i] = 0
else:
continue
plt.imshow(img_org)
提前致谢!
解决方法
颜色的变化是上面注释中提到的指定热图(viridis 而不是二进制)的结果。
输出图像与输入图像的着色不同,因为 OpenCV 使用 BGR 而不是 RGB 来表示颜色,所以很可能您的红色和蓝色通道交换了。如果您使用 OpenCV 读取图像并使用 Matplotlib 绘图,反之亦然。有两个简单的解决方案:
1.) 使用 OpenCV 读取和绘制图像。您可以将 plt.imshow(im_orig)
替换为:
cv2.imshow("window name",im_orig)
cv2.waitKey(0) # waits until a key is pressed before continuing
cv2.destroyAllWindows()
2.) 在用 plt.imshow()
绘图之前交换 R 和 B 通道:
im_orig = cv2.cvtColor(im_orig,cv2.COLOR_BGR2RGB)
plt.imshow(im_orig)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。