определение размера объекта без изменения размера изображения

#python #image #opencv #scale

#python #изображение #opencv #масштаб

Вопрос:

Основная идея:

У меня разные изображения одинакового размера: 2048×2176. На всех этих изображениях есть один и тот же объект, который я пытаюсь обнаружить с помощью метода ‘findContours’. И я знаю, что количество пикселей для этого объекта находится между «нижней и верхней границей» [в зависимости от изображения]. Нижняя граница равна 270, а верхняя граница равна 720.

У меня также есть изображения размером 1024×1088. Я обнаружил, что нижняя и верхняя границы для этого размера равны 135 и 360 соответственно.

Проблема:

Как работает это масштабирование? На данный момент я использую только 2 размера изображения, но я хотел бы иметь возможность использовать изображения разных размеров и масштабировать все автоматически в будущем.

Пример:

Изображение размером 1024x1088

Изображение размером 2048x2176

Я хотел бы знать, каков диапазон в пикселях для контура круга на 2-м изображении, зная диапазон пикселей на 1-м изображении (нижняя и верхняя границы [упомянуты выше]) [без изменения размера изображений] [Мне нужна какая-то формула, чтобы заставить ее работать с изображениями разных размеров].

Некоторый код, чтобы сделать его более понятным:

 constImageSize = 4456448  #image of size 2048x2176
lowBorder = 270  
highBorder = 720  

if (imageSize == constImageSize):
    lowBorder *= 1
    highBorder *= 1
else:
    lowBorder /= 2
    highBorder /= 2
  

Примечание:

  1. Я не могу изменить размер изображения.
  2. У меня также есть другие параметры, которые зависят от этого масштабирования (например, расстояние между 2 разными объектами на одном изображении).

Комментарии:

1. Ваш вопрос мне непонятен. Пожалуйста, опубликуйте примеры изображений? Если вы пытаетесь определить, одинакова ли форма объекта на обоих изображениях, вы можете попробовать использовать cv2.matchShapes() . Смотрите docs.opencv.org/4.1.1/d3/dc0 /…

2. Я попытался объяснить проблему выше (внесите правку). Я добавил несколько примеров изображений (на самом деле у меня есть другие изображения [я не могу ими поделиться], но эти примеры должны прояснить проблему). @fmw42

3. Они масштабируются по соотношению площадей входных изображений. small feature area = large feature area * (small image area / large image area)

4. 1) Что вы подразумеваете под большой пространственной областью (например, «нижняя граница» [это всего лишь количество пикселей]? 2) если да, то, например, «большая область изображения» равна 2048×2176 = 4456448; «малая область изображения» равна 1026×1088 = 1114112; 3) Тогда: «малая область объектов» = 270 (нижняя граница) * (1114112/4456448) = 67,5 ~= 67. 4) Но я знаю, что «низкийbound’ для второго изображения составляет около 135. Итак, что я делаю не так? Под «нижней и верхней границей» я подразумеваю смешивание и максимальное количество пикселей для объекта [круг в моем примере]. @fmw42

5. Я имел в виду, что вы знаете площадь (количество пикселей) каждого объекта на большом изображении (большая область объектов). Исходя из этого и площадей двух изображений (общее количество пикселей), вы можете вычислить площадь (количество пикселей) объектов на маленьком изображении (малая площадь объекта). Вы выполняете математику для каждого объекта отдельно, используя приведенное выше уравнение, которое я предоставил)