Как найти толщину рамки в изображении? Имеется изображение с рамкой (вся рамка - одного цвета), толщина рамки сверху, снизу, слева и справа различная. Необходимо найти толщину с каждой стороны.
Подскажите, пожалуйста, алгоритм, по которому можно вычислить толщину рамки, если у нее не фиксированная длина.
Сам пробовал так: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
227 +2
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 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 835 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир