#python-3.x #imagemagick #wand #connected-components
#python-3.x #imagemagick #wand #подключенные компоненты
Вопрос:
Я пытаюсь получить координаты цветов, используя функцию подключенных компонентов в Windows10 с
- Python 3.8.5
- ImageMagick 7.0.10-29 Q8 x64 2020-09-05
Используя ImageMagick со следующей командой, я правильно получаю координаты.
>convert input.png -define connected-components:verbose=true -define connected-components:area-threshold=100 -connected-components 8
-auto-level out:null
Objects (id: bounding-box centroid area mean-color):
0: 284x172 0 0 133.5,60.0 26161 srgb(0,0,0)
2: 259x59 14 84 143.0,113.0 15281 srgb(255,255,255)
3: 259x17 14 144 143.0,152.0 4403 srgb(255,255,255)
1: 143x21 130 60 201.0,70.0 3003 srgb(255,255,255)
Когда я использую подключенные компоненты с Python3 / Wand, я получаю другой вывод.
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from wand.image import Image
>>> with Image(filename='input.png') as img:
... objects = img.connected_components()
...
>>> for cc_obj in objects:
... print("{0._id}: {0.size} {0.offset}".format(cc_obj))
...
0: (284, 172) (0, 0)
0: (0, 0) (0, 0)
14: (84, 98784247810) (0, 0)
0: (0, 0) (0, 0)
>>>
Почему вывод отличается с python / Wand? Как это исправить? Заранее спасибо.
Ниже приведено входное изображение.
Ниже приведено входное изображение.
Комментарии:
1. Похоже на ошибку в Wand. Должно быть решено с выпуском 0.6.3
2. @emcconville Еще раз спасибо за ваш ответ. В таком случае, знаете ли вы или кто-нибудь другой pythonic способ / библиотеку для получения координат? с уважением
3. Используйте подпроцесс Python для прямого вызова ImageMagick.
4. @fmw42 Отлично, есть альтернатива, вызывающая напрямую потрясающее программное обеспечение ImageMagick. Я разберусь с этим. Большое спасибо за вашу помощь.
5.
@Ger Cas
Смотрите мои примеры подпроцессов ниже.
Ответ №1:
Вот пример использования подпроцесса Python для вызова командной строки ImageMagick (чтобы обрезать лишний фон изображения):
import subprocess
cmd = 'convert 0.png -fuzz 30% -trim repage 0_trim.png'
subprocess.check_output(cmd, shell=True, universal_newlines=True)
Альтернативный вариант:
import subprocess
cmd = 'convert 0.png -fuzz 30% -trim repage 0_trim.png'
subprocess.call(cmd, shell=True)
Комментарии:
1. Спасибо за вашу помощь. Я попробовал ваш пример и работает точно так же, как и с ImageMagick напрямую. Только один вопрос, не слишком связанный с этим потоком. Если
convert
команда является множественной, она работает, когда мы разделяем каждую строку с помощью обратной косой черты`
, но это не работает, когда я запускаюconvert
в Windows. Я имею в виду запуск convert в командной строке DOS. Как было бы правильно запустить множественнуюconvert
команду в терминале DOS? Спасибо2. Синтаксис Windows отличается от Unix. Новые строки и экранирования в Windows являются ^, а не . Также в Windows используйте круглые скобки без escapes. При использовании Windows .bat удвойте % до %%. Смотрите archive.imagemagick.org/Usage/windows
3. Отлично. Очень ценю всю вашу помощь, полученную !! 🙂