Как обрезать одну и ту же область в прямоугольнике разных размеров - PullRequest
0 голосов
/ 07 мая 2019

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

 ((x1,y1),(x2,y2)) = box.position

 print(box.position)

 cv.rectangle(cvImage, (x1, y1), (x2, y2), (255,0,0), 2)

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

Как использовать% или что-то подобное, чтобы всегда получать одинаковые пятна в прямоугольнике независимо от разрешения / размера прямоугольника.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вы можете изменить размер прочитанного вами изображения и обрезать те же области:

image = cv2.imread("image,jpg")
resize_image = cv2.resize(image, (640, 480)) 
...
0 голосов
/ 08 мая 2019

Да, вы всегда можете выбрать одинаковые пропорции изображения. Например, извлеките прямоугольник с координатами, заданными фиксированным отношением (или процентом)

img_w = 1000 # = cvImage.width
img_h = 1000 # = cvImage.height
tl_x = 10.0 / 100.0
tl_y = 10.0 / 100.0
br_x = 90.0 / 100.0
br_y = 90.0 / 100.0

print (tl_x, tl_y, br_x, br_y)

rect_tl = (int(tl_x * img_w), int(tl_y * img_h))
rect_br = (int(br_x * img_w), int(br_y * img_h))

print (rect_tl, rect_br)

#cv.rectangle(cvImage, rect_tl, rect_br, (255,0,0), 2)

Это вычислит координаты прямоугольника на изображении размером 1000x1000, но это переменная, определенная как img_w x img_h

Жестко запрограммированный прямоугольник размещается с отступом 10%, определенным с использованием верхнего левого и нижнего правого углов

Как и ожидалось, результат будет:

0.1 0.1 0.9 0.9
(100, 100) (900, 900)
...