графика — как найти координаты краев на изображении, используя imagick или другую библиотеку?

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

очевидно, я мог бы просто перебирать всю ширину + высоту изображения и смотреть на цвета пикселей (как предлагают некоторые посты), но это кажется ужасно неэффективным. нет ли встроенного алгоритма? кажется, что это должно быть частью imagick где-нибудь, иначе как он может на самом деле найти и нарисовать края внутренних изображений? но у меня проблемы с поиском, как это сделать.

0

Решение

$base = new Imagick(realpath('./trim.png'));
$base->trimImage(0);
// get the new image size
$geometry = $base->getImageGeometry();
// Retrieve the trim info
$pageInfo = $base->getImagePage();

Подобный пример есть на странице руководства:
http://php.net/manual/en/imagick.trimimage.php#111332

1

Другие решения

Похоже, полное решение проблемы в следующем виде:

$im->trimImage(0);
$pagedata = $im->getImagePage();
$x = $pagedata['x'];
$y = $pagedata['y'];
$im->setImagePage(0, 0, 0, 0);
$w = $im->width;
$h = $im->height;

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

оказывается, решение еще проще, если вы работаете с изображением, которое использует прозрачность; это просто getImagePage() функция одна:

$im = new Imagick(realpath('./image.png'));
$pagedata = $im->getImagePage();
$x = $pagedata['x'];
$y = $pagedata['y'];
$w = $pagedata['width'];
$h = $pagedata['height'];
print("x,y: $x, $y<br>\n");
print("w,h: $w, $h<br>\n");

по какой-то причине, если trimImage(0) используется с этим прозрачным изображением, координаты (x, y) установлены в (-1, -1). к сожалению, я не знаю достаточно о Imagick, чтобы сказать, почему это происходит. Может быть, вы могли бы ответить на это, @danack?

0

По вопросам рекламы [email protected]