Смещение мозаичной формы внутри рамки изображения - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть изображение, которое содержит только мозаичную форму с черным везде. Однако этот мозаичный рисунок может быть смещен / смещен в любом месте изображения, особенно по границам изображения. Зная, что эта форма может поместиться внутри изображения после смещения и оставив границы черными, как я могу рассчитать, сколько пикселей в координатах x и y нужно получить, чтобы это смещение было оптимизировано?

Входное изображение enter image description here

Желаемый выход после смещения / смещения enter image description here

Моя мысль была связана с подключенными компонентами на изображении проверьте, какие метки находятся на границе, вычислите наибольшее расстояние между формами каждой оси, которые находятся на границе, и смещением по оси 'с этими значениями. Это может работать, но я чувствую, что должны быть более разумные способы.

1 Ответ

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

Итак, вот подробности того, что я добавил в свой комментарий для этого с Python / OpenCV / Numpy. Это то, что вы хотите?

  • Чтение ввода
  • Преобразование в серый
  • Порог в двоичный файл
  • Подсчет количества белых пикселей в каждом столбец и сохранить в массиве
  • Найти первый и последний черный (нулевой счет) элемент в массиве
  • Получить значения по центру x
  • Обрезать изображение на левой и правой частях в центре x
  • Сложить их по горизонтали в обратном порядке
  • Сохранить результат

Ввод:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('black_white.jpg')
hh, ww = img.shape[:2]

# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold
thresh = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)[1]

# count number of white pixels in columns as new array
count = np.count_nonzero(thresh, axis=0)

# get first and last x coordinate where black (count==0)
first_black = np.where(count==0)[0][0]
last_black = np.where(count==0)[0][-1]

# compute x center
black_center = (first_black + last_black) // 2
print(black_center)

# crop into two parts
left = img[0:hh, 0:black_center]
right = img[0:hh, black_center:ww]

# combine them horizontally after swapping
result = np.hstack([right, left])

# write result to disk
cv2.imwrite("black_white_rolled.jpg", result)

# display it
cv2.imshow("RESULT", result)
cv2.waitKey(0)


enter image description here

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