Вырезать все, кроме интересующей области python - PullRequest
0 голосов
/ 28 апреля 2020

Я совершенно новичок в подобных вещах, я использовал SLI C для получения суперпикселей из изображения, теперь я извлек один обнаруженный суперпиксель, но это похоже на все измерение начала img, за исключением того, что есть суперпиксель и остальная часть изображения черная, извините за мой плохой английский sh, я постараюсь объяснить ниже.

import cv2
import numpy as np
from skimage.segmentation import slic

myimg = cv2.imread('4.5.jpg')
segments = slic(myimg, n_segments=200, compactness=10, sigma=1)



for i, segVal in enumerate(np.unique(segments)):


    mask = np.zeros(myimg.shape[:2], dtype = "uint8")
    mask[segments == segVal] = 255
    cv2.imwrite('output.png', cv2.bitwise_and(myimg, myimg, mask = mask))

    #show the masked region
    #cv2.imshow("Mask", mask)
    cv2.imshow("Applied", cv2.bitwise_and(myimg, myimg, mask = mask))
    cv2.waitKey(1)

это мой код для получения суперпикселей, но когда я сохраняю один суперпиксель, что я получаю по этой ссылке (мне пока не разрешено вставлять изображения): суперпиксель

теперь, как вы можете видеть, есть большая черная область с H и W исходного изображения и суперпикселя, я могу * обрезать только «прямоугольник или квадрат» с областью суперпикселя, как я могу это сделать? спасибо и извините за мой английский sh

1 Ответ

0 голосов
/ 29 апреля 2020

Для этой задачи вы можете использовать cv2.findContours. Обратитесь к документации , чтобы узнать, как ее использовать. После определения контуров, которые в вашем случае будут только один, вы можете использовать

x,y,w,h = cv2.boundingRect(cnt)

, где x, y - координаты верхнего левого угла, а w, h - ширина и высота прямоугольника. Теперь мы можем знать все точки требуемого объекта и вы можете обрезать его, используя индексирование numpy.

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