在简单的任务中需要帮助。我正在玩的LISC数据集,其中包含血液学图像从外周血和分割面具人工地面真相为这些图形样本。任务如下:
结果应该是这样的(这些结果是通过Mask、GrabCut和OpenCV的组合获得的,但不适合我目前正在进行的项目):


下面是我所得到的代码(来自jupyter笔记本):
%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, (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)

提前感谢!
发布于 2021-04-27 15:29:43
颜色的变化是指定的热图(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)https://stackoverflow.com/questions/67271730
复制相似问题