Подсчет количества объектов в изображении PNG с использованием ImageMagick - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь подсчитать количество объектов на изображении

У меня есть тестовое изображение test image with red squars

и после использования магической функции php я могу преобразовать ее в двоичное изображение

test image converted into binary image

мне нужна функция, которая в этом случае возвращает номер белого объекта на изображении 8 Я не очень много знаю об изображении, однако на изображении была удалена запись, в которой используется следующая команда

var_dump( 
        exec("convert out.pbm -define connected-components:verbose=true  -define connected-components:area-threshold=50 \ -connected-components 4 -auto-level -depth 8 test.png")
);

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Какая у вас версия ImageMagick? -connected-components требуется как минимум версия 6.8.9.10. Выньте \ и сделайте все это одной длинной строкой. Использование новой строки \ может сбить с толку PHP exec ().

Попробуйте и увеличьте порог вашей области до 150:

<?php
exec("convert out.pbm -define connected-components:verbose=true -define connected-components:area-threshold=150 -connected-components 4 -auto-level -depth 8 test.png 2>&1",$out,$returnval);
foreach($out as $text)
{echo "$text<br>";}
?>


Затем следует вернуть:

Objects (id: bounding-box centroid area mean-color):
  22: 665x500+0+0 332.0,241.1 295195 gray(0)
  7605: 125x101+86+380 150.6,431.3 10246 gray(255)
  6995: 139x105+476+350 541.7,401.0 10087 gray(255)
  5560: 94x62+133+233 182.0,265.4 4622 gray(255)
  5196: 106x61+434+217 483.3,246.8 4608 gray(255)
  3470: 76x42+162+145 201.4,164.9 2448 gray(255)
  3023: 76x40+401+126 438.7,145.5 2391 gray(255)
  1420: 58x28+186+75 215.5,88.7 1315 gray(255)
  992: 61x24+385+64 414.3,75.7 1146 gray(255)
  2: 33x18+0+0 12.9,6.6 391 gray(0)


Если вы просто хотите получить список без изображения, вы можете заменить test.png на null:.

Если вы хотите, чтобы выходные данные были двоичными, а не в градациях серого для числовых идентификаторов, добавьте -define connected-components: mean-color = true:

<?php
exec("convert out.pbm -define connected-components:verbose=true -define connected-components:area-threshold=150 -define connected-components:mean-color=true -connected-components 4 -auto-level -depth 8 test.png 2>&1",$out,$returnval);
foreach($out as $text)
{echo "$text<br>";}
?>


Если вы просто хотите считать и двоичный вывод, попробуйте:

<?php
exec("convert image.jpg -define connected-components:verbose=true -define connected-components:area-threshold=150 -define connected-components:mean-color=true -connected-components 4 -auto-level -depth 8 test.png 2>&1 | grep "gray(255)" | wc -l | sed 's/^[ ]*//' ",$out,$returnval);
foreach($out as $text)
{echo "$text<br>";}
?>


Который должен вернуть 8.

См. https://www.imagemagick.org/script/connected-components.php

0 голосов
/ 10 сентября 2018

Это похоже на то, что вам нужно:

<?php
$output=shell_exec("convert -size 1000x1000 xc:black -fill white -draw \"rectangle 10,10 900,900\" -define connected-components:verbose=true -connected-components 4 -auto-level -depth 8 test.png");
echo $output;
?>

Обязательно проанализируйте вывод, который выглядит так:

Objects (id: bounding-box centroid area mean-color):
1: 891x891+10+10 455.0,455.0 793881 srgba(100%,100%,100%,1.08255)
0: 1000x1000+0+0 670.9,670.9 206119 srgba(0%,0%,0%,1.31795)

и обратите внимание на цвет (если вы хотите белые объекты), а также на область - поля / столбцы озаглавлены / помечены в первой строке вывода. Таким образом, вы должны заметить, что обнаружено 2 объекта: первый белый и меньше, второй черный и размер всего изображения.

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