给定像素标签,在python中绘制一个边框

时间:2019-01-05 18:16:28

标签: python image-processing computer-vision

使用cityscapes数据集,我想在行人周围绘制一个边界框,并在其中填充噪声(盐和胡椒粉)。

enter image description here
enter image description here

具有以下注释

"objects": [
    {
        "instanceId": 24000, 
        "bbox": [
            1580, 
            277, 
            150, 
            366
        ], 
        "bboxVis": [
            1594, 
            279, 
            126, 
            364
        ], 
        "label": "pedestrian"
    }, 

我该如何围绕行人绘制边界框?或最佳做法是什么?

下面是我要实现的目标的示例。

enter image description here

注意:我调整了原始大小(1024x2048)以便查看。

更新:非常欢迎提示或建议!

更新#2 添加了我要实现的示例。所以这里有两件事。首先,绘制矩形边界框,然后2)填充噪声。希望这可以清除一切。

2 个答案:

答案 0 :(得分:1)

如果您裁剪区域并从上面的链接中应用盐和胡椒功能,则可以实现图像中的盐和胡椒边界框(我只是对该区域进行了硬编码,但是您可以从标签中读取它) :

盐和胡椒粉功能取自here

import cv2
import numpy as np
import time

def noisy(image):
    row, col, ch = image.shape
    s_vs_p = 0.5
    amount = 0.5
    out = image
    # Salt mode
    num_salt = np.ceil(amount * image.size * s_vs_p)
    coords = [np.random.randint(0, i - 1, int(num_salt))
              for i in image.shape]
    out[coords] = 1

    # Pepper mode
    num_pepper = np.ceil(amount * image.size * (1. - s_vs_p))
    coords = [np.random.randint(0, i - 1, int(num_pepper))
              for i in image.shape]
    out[coords] = 0
    return out

im = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
x = 1580
y = 277
h = 366
w = 150
crop_img = im[y:y+h, x:x+w]
noisy(crop_img)
cv2.rectangle(im, (x,y), (x+w, y+h), (0,0,0), 2) #change (0,0,0) to whatever color you want
cv2.imwrite('exp.jpg', im)

Bounding_box_pedestrian

答案 1 :(得分:0)

您要问吗?

A。如何找到边界框的坐标?

B。您在问如何使用python在图像中绘制矩形吗?

A。对于每个行人,获取每个轴的最高和最低像素值(x_min,x_max,y_min,y_max),然后将用作边界框的边界值。

B。您可以使用openCV:

import cv2

image = cv2.imread('the path to your image')
cv2.rectangle(image,(x_min,y_min),(x_max,y_max),(0,255,0),2) # add rectangle to image