我正在尝试裁剪MASK RCNN]输出的分段对象,唯一的问题是,当我进行裁剪时,我得到的片段具有蒙版颜色,而不是其原始颜色。
这是带有分段的输出图像:
这是一个片段(此图像中有17个片段):
正如您所看到的,我们的段具有蒙版颜色,而不是原始颜色。
这是我正在使用的代码:
from mrcnn.config import Config from mrcnn import model as modellib from mrcnn import visualize import numpy as np import colorsys import argparse import imutils import random import cv2 import os import matplotlib.image as mpimg import cv2 import matplotlib.pyplot as plt import numpy as np # construct the argument parse and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-w", "--weights", required=True, help="path to Mask R-CNN model weights pre-trained on COCO") ap.add_argument("-l", "--labels", required=True, help="path to class labels file") ap.add_argument("-c", "--confidence", type=float, default=0.5, help="minimum probability to filter weak detections") ap.add_argument("-i", "--image", required=True, help="path to input image to apply Mask R-CNN to") args = vars(ap.parse_args()) # load the class label names from disk, one label per line CLASS_NAMES = open(args["labels"]).read().strip().split("\n") # generate random (but visually distinct) colors for each class label # (thanks to Matterport Mask R-CNN for the method!) hsv = [(i / len(CLASS_NAMES), 1, 1.0) for i in range(len(CLASS_NAMES))] COLORS = list(map(lambda c: colorsys.hsv_to_rgb(*c), hsv)) random.seed(42) random.shuffle(COLORS) class SimpleConfig(Config): # give the configuration a recognizable name NAME = "fashion" # set the number of GPUs to use along with the number of images # per GPU GPU_COUNT = 1 IMAGES_PER_GPU = 1 NUM_CLASSES = 1 + 3 # Skip detections with < 90% confidence DETECTION_MIN_CONFIDENCE = args["confidence"] # initialize the inference configuration config = SimpleConfig() # initialize the Mask R-CNN model for inference and then load the # weights print("[INFO] loading Mask R-CNN model...") model = modellib.MaskRCNN(mode="inference", config=config, model_dir=os.getcwd()) model.load_weights(args["weights"], by_name=True) # load the input image, convert it from BGR to RGB channel # ordering, and resize the image # default value 512 form the width image = cv2.imread(args["image"]) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = imutils.resize(image, width=1150) # perform a forward pass of the network to obtain the results print("[INFO] making predictions with Mask R-CNN...") r = model.detect([image], verbose=1)[0] image = visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], ['BG', 'top', 'boots' , 'bag'], r['scores'], title="") # get and then save the segmented objects i = 0 mask = r["masks"] for i in range(mask.shape[2]): image = cv2.imread(args["image"]) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = imutils.resize(image, width=1150) for j in range(image.shape[2]): image[:,:,j] = image[:,:,j] * mask[:,:,i] filename = "Output/segment_%d.jpg"%i cv2.imwrite(filename,image) i+=1
非常感谢您提供有关解决此问题的帮助,谢谢。
我正在尝试裁剪由MASK RCNN输出的分段对象,唯一的问题是,当我进行裁剪时,我得到的部分具有蒙版颜色而不是其原始颜色。这是...
我认为您需要在可视化display_intance中更改此行line,并将面色从none
更改为None
。