Сдвиг изображения на x пикселей влево при сохранении исходной формы

Применение шаблона singleton в Java-мире почти автоматически означает создание одноэлементных объектов данного класса. Объекты классов живут в контексте JVM, «единственный» экземпляр - для VM-процесса.

На самом деле он может стать хуже, поскольку несколько загрузчиков классов с одной JVM могут приводить к нескольким " (например, в приложении JEE, где изолированы загрузчики классов).

Но singleton является шаблоном, он может абстрактным образом применяться к приложения или системы в целом. Конечно, технология или тип компонента, возможно, придется изменить.

Распределенные системы также могут иметь понятие «одноэлементный компонент». Хороший пример использования сервисов singleton для запуска кластера. Это, конечно, переопределяет масштаб объекта singleton, но это почти ничего нового, поскольку в любом случае мы всегда использовали отдельные экземпляры определенных типов (например, одну базу данных) в системе с несколькими приложениями.

0
задан Suhail Gupta 20 January 2019 в 06:37
поделиться

1 ответ

При обработке изображений это называется переводом изображения.

Исходное изображение:

enter image description here

import cv2
import numpy as np

# Read image
img = cv2.imread("roi.jpg") 

# The number of pixels
num_rows, num_cols = img.shape[:2]

# Creating a translation matrix
translation_matrix = np.float32([ [1,0,70], [0,1,110] ])

# Image translation
img_translation = cv2.warpAffine(img, translation_matrix, (num_cols,num_rows))

#cv2.namedWindow('Translation', cv2.WINDOW_NORMAL)
cv2.imshow('Translation', img_translation)
cv2.waitKey(0)
cv2.destroyAllWindows()

Это даст вам:

[1110 ] enter image description here

Но мы хотим что-то вроде этого:

enter image description here

Перевод в основном означает, что мы сдвиг изображения путем добавления / вычитания координат X и Y. Для этого нам нужно создать матрицу преобразования, как показано ниже:

enter image description here

Здесь значения tx и ty являются значениями перевода X и Y, то есть изображение будет перемещено на X единиц вправо и на Y единиц вниз.

Так что, как только мы создадим такую ​​матрицу, мы можем использовать функцию warpAffine, чтобы применить ее к нашему изображению.

Третий аргумент в warpAffine относится к числу строк и столбцов в результирующем изображении. Поскольку количество строк и столбцов совпадает с исходным изображением, результирующее изображение будет обрезано. Причина этого в том, что у нас не было достаточно места на выходе, когда мы применили матрицу перевода. Чтобы избежать обрезки, мы можем сделать что-то подобное:

img_translation = cv2.warpAffine(img, translation_matrix, (num_cols + 70, num_rows + 110))

cv2.namedWindow('Translation', cv2.WINDOW_NORMAL)
cv2.imshow('Translation', img_translation)
cv2.waitKey(0)
cv2.destroyAllWindows()

И это приведет к:

enter image description here

Помните, что размер изображения при загрузке здесь изменяется, не беспокойтесь, это ваш желаемый результат.

Кроме того, если мы хотим переместить изображение в середине большего кадра изображения; мы можем сделать что-то подобное, выполнив следующее:

num_rows, num_cols = img.shape[:2]

translation_matrix = np.float32([ [1,0,70], [0,1,110] ])

img_translation = cv2.warpAffine(img, translation_matrix, (num_cols + 70, num_rows + 110))

translation_matrix = np.float32([ [1,0,-30], [0,1,-50] ])

img_translation = cv2.warpAffine(img_translation, translation_matrix, (num_cols + 70 + 30, num_rows + 110 + 50))

cv2.namedWindow('Translation', cv2.WINDOW_NORMAL)
cv2.imshow('Translation', img_translation)
cv2.waitKey(0)
cv2.destroyAllWindows()

, который дает вам вывод:

enter image description here

0
ответ дан Amit Amola 20 January 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: