Я пытаюсь подсчитать количество объектов на изображении
У меня есть тестовое изображение
и после использования магической функции php я могу преобразовать ее в двоичное изображение
мне нужна функция, которая возвращает количество белых объектов на изображении в этом случае 8 Я мало что знаю об изображении, однако на imagemagic была удаленная запись, в которой используется следующая команда
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")
);
@MarkSetchell, я смотрел этот ваш пост, и я думаю, что это было бы моим решением, однако функция exec ничего не возвращает, я устал от простой команды преобразования, и она работала
Мне надоели разные куски команды exec ("convert binary.jpg -colorspace gray -negate -threshold 10% -define connected-components: verbose = true -define connected-components: area-threshold = 100 output.png", $ o) его работа и output.png создается (однако я ничего не получаю взамен в php), но когда я добавляю последнюю команду -connected-components 8 -auto-level, выходной файл не создается, поэтому это означает, что есть какая-то ошибка
Кажется, это то, что вам нужно:
<?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 объекта: первый белый и меньшего размера, второй черный и имеет размер всего изображения.
все еще отмечая, он возвращает пустую строку, команда работает и файл создается
Я не на машине, где могу протестировать, может, попробую $output = shell_exec("convert ... 2>&1")
код и структура файла awmark.website/nadeem_img_processing/code.png shell_exec возвращают null
Удалите там постороннюю обратную косую черту.
Ммм ... в оболочке / Терминале попробуйте найти полный путь к convert
с помощью which convert
, а затем используйте полный путь в своем коде.
Вам вдруг кажется, что вы используете изображение в формате JPEG! Пожалуйста, убедитесь, что он двоичный с convert image.jpg -colorspace gray -threshold 50% -define ....
Позвольте нам продолжить обсуждение в чате.
Какая у вас версия 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
Я опубликовал более 40 ответов по этому поводу, введите следующее в поле поиска StackOverflow
user:2836621 connected components