Вывод подключенных компонентов отличается между ImageMagick и Wand?

#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. Отлично. Очень ценю всю вашу помощь, полученную !! 🙂