【问题标题】:Multiple color bounding-boxes for different category objects不同类别对象的多个颜色边界框
【发布时间】:2021-09-07 01:28:56
【问题描述】:

我正在实施“BBAVectors-Oriented-Object-Detection”https://github.com/yijingru/BBAVectors-Oriented-Object-Detection 模型。测试模型后,所有检测到的对象都以相同颜色的边界框显示。

下面是test.py代码https://github.com/yijingru/BBAVectors-Oriented-Object-Detection/blob/master/test.py的链接。我发现以下代码行改变了边界框的颜色。

ori_image = cv2.drawContours(ori_image, [np.int0(box)], -1, (255,0,255),1,1)

但是,它一次只需要一种颜色。

此外,在“BBAVectors-Oriented-Object-Detection”https://github.com/yijingru/BBAVectors-Oriented-Object-Detection/blob/master/datasets/dataset_dota.py 的另一个文件“dataset_dota.py”中,我找到了为每个对象类别分配的颜色。

class DOTA(BaseDataset):
    def __init__(self, data_dir, phase, input_h=None, input_w=None, down_ratio=None):
        super(DOTA, self).__init__(data_dir, phase, input_h, input_w, down_ratio)
        self.category = ['plane',
                         'baseball-diamond',
                         'bridge',
                         'ground-track-field',
                         'small-vehicle',
                         'large-vehicle',
                         'ship',
                         'tennis-court',
                         'basketball-court',
                         'storage-tank',
                         'soccer-ball-field',
                         'roundabout',
                         'harbor',
                         'swimming-pool',
                         'helicopter'
                         ]
        self.color_pans = [(204,78,210),
                           (0,192,255),
                           (0,131,0),
                           (240,176,0),
                           (254,100,38),
                           (0,0,255),
                           (182,117,46),
                           (185,60,129),
                           (204,153,255),
                           (80,208,146),
                           (0,0,204),
                           (17,90,197),
                           (0,255,255),
                           (102,255,102),
                           (255,255,0)]
        self.num_classes = len(self.category)
        self.cat_ids = {cat:i for i,cat in enumerate(self.category)}
        self.img_ids = self.load_img_ids()
        self.image_path = os.path.join(data_dir, 'images')
        self.label_path = os.path.join(data_dir, 'labelTxt')

我对 Python 和 Opencv 比较陌生。如果有人可以帮助我链接这些文件并在不同颜色的边界框中显示检测到的对象或在不同颜色的边界框中显示不同对象类别的其他方法,我将不胜感激。谢谢

在当前版本中,检测到的对象如下所示:

detected samples

【问题讨论】:

    标签: python opencv object-detection


    【解决方案1】:

    这是一个sn-p:

    # Initialize the DOTA Class 
    dota_object = DOTA(data_dir, phase)
    
    # Get color 
    object = 'plane'
    id = dota_object.category.index(object)
    color = dota_object.color_pans[id]
    
    # Display the image
    ori_image = cv2.drawContours(ori_image, [np.int0(box)], -1, color,1,1)
    

    将变量替换为代码中的变量 (ori_image,dota_object,data_dir,phase)

    【讨论】:

    • 谢谢,我听从了你的建议,遇到了另一个问题。如果object = 'plane' 仍然模型检测具有单一颜色边界框的对象。我做了一些修改。 ``` object = dota_object.category #object= ['plane', 'baseball-diamond', ... , 'helicopter' ] id = dota_object.category.index(object) color = dota_object.color_pans[id] `` ` 我尝试了两种方法将类别列表分配给object,但出现以下错误,ValueError: ['plane', 'baseball-diamond', ..., 'helicopter'] is not in list。有什么办法解决这个错误吗??
    • 用模型的输出替换“平面”,假设模型的预测保存在一个名为 pred 的列表中,第一个元素是预测的类,例如 ['plane',(x1,y1),(x2,y2)] 然后执行object=pred[0](这是一个示例,根据您的代码进行更改)
    猜你喜欢
    • 2023-03-08
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多