Граничная рамка с выделением всего изображения вместо полигонов - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь нарисовать ограничивающие рамки вокруг многоугольных изображений. Я изначально пометил изображения и создал многоугольные маски с помощью файла json. сохраняйте имена файлов постоянными.

import cv2
import numpy as np
import json
import matplotlib.pyplot as plt

jsonFile ='/directory..../.json' 

with open(jsonFile) as file:
    annotations = json.load(file)
    
    for key in annotations:
        regions = annotations[key]['regions']
        for region in regions:
            print(annotations[key]['filename'],"\n")

            image = cv2.imread('/directory to mask images.png' + annotations[key]['filename'])
            original = image.copy()

            gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
            thresh = cv2.threshold(gray, 0,255,cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
            # Find contours, obtain bounding box, extract and save ROI
            ROI_number = 0
            cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
            cnts = cnts[0] if len(cnts) == 2 else cnts[1]
            for c in cnts:
                x,y,w,h = cv2.boundingRect(c)
                cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
                ROI = original[y:y+h, x:x+w]
                cv2.imwrite('ROI_{}.png'.format(annotations[key]['filename']), ROI)
                ROI_number += 1
            cv2.imshow('image', image)
            cv2.waitKey()

Моя проблема в том, что вместо рисования ограничивающих рамок над многоугольниками на изображении я просто очерчиваю границу всего изображения.

Если это важно, изображение черное, а маски многоугольников белые.

1 Ответ

0 голосов
/ 03 августа 2020

Думаю, проблема может быть в пороговой операции. Если исходное изображение черное с белыми многоугольниками, то cv2.THRESH_BINARY_INV преобразует его в белое изображение с черными многоугольниками. Так как функция контура находит многоугольники, окружающие пустое пространство, полученный многоугольник будет окружать все изображение. Чтобы исправить это, просто используйте cv2.THRESH_BINARY вместо cv2.THRESH_BINARY_INV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...