首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像分割与掩蔽

图像分割与掩蔽
EN

Stack Overflow用户
提问于 2021-04-26 18:10:26
回答 1查看 1.9K关注 0票数 1

在简单的任务中需要帮助。我正在玩的LISC数据集,其中包含血液学图像从外周血和分割面具人工地面真相为这些图形样本。任务如下:

  1. 通过使用数据集中给出的分割掩码去除/裁剪不相关的背景元素来分割分离的白细胞。只在一个样本上试一下这个。
  2. 完成后,遍历整个文件夹,并对其余的示例进行分段/裁剪。

结果应该是这样的(这些结果是通过Mask、GrabCut和OpenCV的组合获得的,但不适合我目前正在进行的项目):

下面是我所得到的代码(来自jupyter笔记本):

代码语言:javascript
复制
%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)

代码语言:javascript
复制
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)

我不知道为什么图像会改变颜色,因为原来的面具看起来像这样(只是黑色和灰色):

下面是我为最终结果使用的代码,但是一旦应用了掩码,颜色就会被扭曲,并且与原来的颜色不同,这就是我现在试图修复的,但是没有用:

代码语言:javascript
复制
%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, (400,400), 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)

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 15:29:43

颜色的变化是指定的热图(viridis而不是二进制)的结果,如上面在注释中所指出的。

输出图像的颜色与输入图像不同,因为OpenCV使用BGR而不是RGB作为颜色,因此很可能您的红色和蓝色通道会被交换。如果用OpenCV读取图像,用Matplotlib绘图,反之亦然。有两个简单的解决方案:

1.)使用OpenCV读取和绘制图像。您可以将plt.imshow(im_orig)替换为:

代码语言:javascript
复制
cv2.imshow("window name", im_orig)
cv2.waitKey(0) # waits until a key is pressed before continuing
cv2.destroyAllWindows()

2.)在用plt.imshow()绘图之前交换R和B通道

代码语言:javascript
复制
im_orig = cv2.cvtColor(im_orig, cv2.COLOR_BGR2RGB)
plt.imshow(im_orig)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67271730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档