Ответ Марка точен.Однако он забыл упомянуть, что compare
также может возвращать «дельта-изображение», при котором любой пиксель с различиями будет окрашен в красный цвет, тогда как идентичные пиксели будут белым.
# Create a PNG and a JPEG from the builtin 'wizard:' image:
convert wizard: wizard.png
convert wizard: wizard.jpg
Теперь сравните два:
compare wizard.png wizard.jpg delta.png
Это 'delta.png':
Много различий между PNG и JPEG!Хорошо, это объясняется тем фактом, что JPEG - это формат изображения с потерями ...
Как видите, файл delta.png имеет бледный фон.Если вам не нужен этот фон, а только красные / белые пиксели, измените команду compare
:
compare wizard.png wizard.jpg -compose src delta.png
Кроме того, вы можете игнорировать такие различия, которые ниже определенного порога.Здесь пригодится параметр -fuzz N%
.
Вам нужны синие пиксели вместо красных?А желтые вместо белых?Вот, пожалуйста:
compare \
-highlight-color blue \
-lowlight-color yellow \
-fuzz 3% \
wizard.png \
wizard.jpg \
delta2.png
Вы хотите текстовое описание всех пикселей, которые отличаются соответствующими координатами?Здесь может быть хорош специальный формат вывода *.txt
.
Попробуйте это:
compare \
-fuzz 6% \
wizard.png \
wizard.jpg \
-compose src \
delta3.txt
Файл 'delta3.txt' будет довольно большим, поскольку он содержит одну строку на пиксель в этом формате:
# ImageMagick pixel enumeration: 480,640,255,srgba
0,0: (255,255,255,0.8) #FFFFFFCC srgba(255,255,255,0.8)
1,0: (255,255,255,0.8) #FFFFFFCC srgba(255,255,255,0.8)
2,0: (255,255,255,0.8) #FFFFFFCC srgba(255,255,255,0.8)
[....]
77,80: (241,0,30,0.8) #F1001ECC srgba(241,0,30,0.8)
[....]
В первом столбце содержится пара (row,column)
соответствующего пикселя (отсчет начинается с нуля, самый верхний, самый левый пиксель имеет адрес (0,0)
.
. Следующие три столбца возвращают соответствующий цвет пикселя в 3различные распространенные форматы обозначений.
Кстати, ImageMagick может без проблем преобразовать файл delta3.txt
в реальное изображение:
convert delta3.txt delta3.png
Таким образом, чтобы получить все пиксели, которые отличаются (красный) в текстовый файл, вы можете сделать это:
compare \
-fuzz 6% \
wizard.png \
wizard.jpg \
-compose src \
txt:- \
| grep -v '#FFFFFFCC'
Для подсчета количества разных пикселей:
compare \
-fuzz 6% \
wizard.png \
wizard.jpg \
-compose src \
txt:- \
| grep -v '#FFFFFFCC' \
| wc -l
С -fuzz 6%
У меня 2269
различных пикселей.-fuzz 0%
Я получаю 122474
разных пикселей. (Общее количество пикселей на этих изображениях было 307200
.)