Мне нужно найти предопределенную область на изображении и заменить ее другим изображением (просто вставив последнее). Предопределенное пятно будет областью прямоугольника с переменным размером, заполненной сплошным фоном ранее согласованного цвета.
Проконсультируйтесь о том, как мне это достичь?
Наверное, я могу найти первый пиксель указанного цвета, выполнив цикл и пройдя изображение по строке, пиксель за пикселем, но я чувствую, что это не самое эффективное решение. Поскольку место должно быть довольно большим, я также подумал обойти картину (см. Приложение ниже).
Поэтому мне нужна помощь в определении этих циклов. Я считаю, что для этого мне нужно будет использовать некоторые математические функции.
Например, если большая картина была квадратной, диагональная петля (желтая линия EF ) использовала бы упрощенную линейную функцию y=x
( y=1x+0
), но вряд ли она была бы квадратной. Поэтому мне придется использовать расширенную полную линейную функцию y=kx+b
где k
будет иметь какое-то отношение к размеру прямоугольника (я думал, k=height/width
), а b
будет равно 0. Таким образом, цикл будет выглядеть как:
$k = 1080/1920; for ( $x=1920; $x>0; $x-- ) { $y = $k*$x; }
Но это желтый, и самый простой, я думаю. Теперь, как определить другие? Пожалуйста помоги. благодаря
Получите фрагменты вашего суб-изображения, которое вы ищете, и найдите его на большом изображении.
Вы можете использовать под-изображение ImageMagick:
compare -verbose -dissimilarity-threshold 0.1 -subimage-search subimage.jpg bigimage.jpg
Подробнее об этом здесь , здесь и здесь .
Он либо скажет вам «TooDissimilar», либо он сообщит вам о положении x, y на этом изображении.