Как найти толщину рамки в изображении? Имеется изображение с рамкой (вся рамка - одного цвета), толщина рамки сверху, снизу, слева и справа различная. Необходимо найти толщину с каждой стороны.
Подскажите, пожалуйста, алгоритм, по которому можно вычислить толщину рамки, если у нее не фиксированная длина.
Сам пробовал так:for i in range(width): # Цикл идет СЛЕВА
for j in range(height): # Цикл идет СВЕРХУ
if not np.array_equal(img[i,j], border_color): # если вдруг пиксели стали не равны цвету рамки
border[0] = i # граница СЛЕВА
border[1] = j # граница СВЕРХУ
Но таким образом я вычисляю координаты точки, где рамка заканчивается лишь слева-сверху. Всё бы хорошо, но даже зная эти координаты не доходит - как следовать дальше? Рамка-то с разных сторон имеет разную толщину.
Нужно найти координаты справа-снизу? А как заставить цикл следовать по изображению в таком направлении? Я вообще на верном пути, или подход в корне неверный? Может, готовая функция какая-то для этого предусмотрена?

21 Авг 2019 в 06:23
254 +1
0
Ответы
1

Для определения толщины рамки с каждой стороны на изображении, можно воспользоваться следующим алгоритмом:

Начните с точки в верхнем левом углу изображения и двигайтесь по горизонтальной (вправо) и вертикальной (вниз) оси, пока не достигнете границы рамки. Запомните координаты точек, где цвет меняется с цвета рамки на другой цвет.Повторите шаг 1 для точки в нижнем правом углу изображения, двигаясь в обратном направлении (влево и вверх), чтобы найти вторую границу рамки.Из найденных координат вычислите разность между ними по горизонтали и вертикали, чтобы определить толщину рамки с каждой стороны.

Пример кода на Python:

import numpy as np
import cv2
# Загрузите изображение
img = cv2.imread('image.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Определите цвет рамки
border_color = img[0, 0]
# Найти верхнюю левую границу рамки
top_left = np.where((img != border_color).all(axis=2))
top_border = min(top_left[0])
# Найдите нижнюю правую границу рамки
bottom_right = np.where((img != border_color).all(axis=2))
bottom_border = max(bottom_right[0])
# Вычислите толщину рамки
left_border = min(top_left[1])
right_border = img.shape[1] - max(bottom_right[1])
top_border_thickness = top_left[0][0] - top_border
bottom_border_thickness = bottom_border - bottom_right[0][0]
print(f'Толщина рамки сверху: {top_border_thickness}')
print(f'Толщина рамки снизу: {bottom_border_thickness}')
print(f'Толщина рамки слева: {left_border}')
print(f'Толщина рамки справа: {right_border}')

Этот код поможет вам определить толщину рамки с каждой стороны на изображении.

20 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир