окружающая среда:
питон: 3.6.3
opencv: 3.4.2
Windows 10
Я хочу нарисовать ограничивающую рамку для изображения, код следующий:
def draw_rect(img, bboxes):
# img = img.copy()
for bbox in list(bboxes[:, :4]):
bbox = [int(float(co)) for co in bbox]
bbox[2] += bbox[0]
bbox[3] += bbox[1]
cv2.rectangle(img, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 4)
cv2.imshow('hh', img)
cv2.waitKey(0)
img = cv2.imread(r'E:\dataset\steel\train_dataset\0B4F3CC3.jpg')
bboxes = [[123, 124, 500, 500], [200, 200, 400, 400]]
# img = img[:, :, ::-1] # simple transform
draw_rect(img, np.array(bboxes))
этот код работает нормально, но когда я даю простое преобразование перед рисованием bbox.
def draw_rect(img, bboxes):
# img = img.copy()
for bbox in list(bboxes[:, :4]):
bbox = [int(float(co)) for co in bbox]
bbox[2] += bbox[0]
bbox[3] += bbox[1]
cv2.rectangle(img, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 4)
cv2.imshow('hh', img)
cv2.waitKey(0)
img = cv2.imread(r'E:\dataset\steel\train_dataset\0B4F3CC3.jpg')
bboxes = [[123, 124, 500, 500], [200, 200, 400, 400]]
img = img[:, :, ::-1] # simple transform
draw_rect(img, np.array(bboxes))
Запустите приведенный выше код, в окне отображается только изображение, без каких-либо ограничений.
но когда я добавляю код img = img.copy()
следующим образом:
def draw_rect(img, bboxes):
img = img.copy()
for bbox in list(bboxes[:, :4]):
bbox = [int(float(co)) for co in bbox]
bbox[2] += bbox[0]
bbox[3] += bbox[1]
cv2.rectangle(img, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 4)
cv2.imshow('hh', img)
cv2.waitKey(0)
img = cv2.imread(r'E:\dataset\steel\train_dataset\0B4F3CC3.jpg')
bboxes = [[123, 124, 500, 500], [200, 200, 400, 400]]
img = img[:, :, ::-1] # simple transform
draw_rect(img, np.array(bboxes))
все идет хорошо. Так в чем же причина этого явления?