ImageMagick은 차이 이미지를 생성하지 않고 비교합니다.

ImageMagick은 차이 이미지를 생성하지 않고 비교합니다.

저는 Raspberry Pi에서 ImageMagick Compare를 사용하여 5분마다 두 이미지 간의 차이를 계산하고 있습니다. 이 작업은 거의 1분 정도 소요되며 대부분의 CPU 부하가 차이 이미지 생성으로 인한 것이라고 생각됩니다. 나에게 필요한 것은 이미지가 아니라 결과입니다. 하지만 결과 이미지의 이름을 제공하지 않으면 오류가 발생합니다. 이것이 불가능합니까?

답변1

나는 지금 같은 문제로 어려움을 겪고 있으며 답을 찾았습니다.예!

TL;DR: NULL:차이점으로 지정하는 파일 이름, 즉

compare -metric rmse foo.png bar.png NULL:

ImageMagick 문서

ImageMagick은 다양한 출력 형식 지정을 지원합니다. 그 중 하나는 x:사용자가 이미지 간의 차이점을 즉시 확인할 수 있는 창을 여는 것입니다.

이에 대한 자세한 내용은 다음에서 확인할 수 있습니다.문서화 compare프로그램:

물론 "비교" 이미지를 저장하는 대신 특수한 "x:" 출력 형식으로 출력하거나 "show" 프로그램을 사용하여 직접 볼 수도 있습니다. 예를 들어..

compare bag_frame1.gif bag_frame2.gif x:

ImageMagicks 이미지 형식 문서를 더 자세히 살펴보면서 다음과 같은 사실을 발견하게 되었습니다.이미지 형식 목록(제목 "의사 이미지 형식" 참조), NULL이미지 형식을 다음과 같이 지정합니다.

몽타주를 사용하여 빈 타일을 만드는 데 유용합니다(NULL: 사용). 이미지 판독 성능을 평가할 때 출력 형식으로도 사용됩니다.

성능 개선

참고로 NULL:NULL 형식이 더 빠르다는 것을 실제로 확인하기 위해 PNG, GIF, TGA 및 100배의 렌더링 시간도 비교했습니다. 나는 그것을 억제하기 위해 stderr (2)를 /dev/null로 파이프하고 있다는 점에 유의하십시오 compare.

PNG로 출력(~0.085초):

time for n in {1..100}; do compare -metric rmse foo.png bar.png out.png 2>/dev/null ; done

real    0m3,036s
user    0m7,582s
sys     0m0,911s

GIF로 출력(~0.147초):

time for n in {1..100}; do compare -metric rmse foo.png bar.png out.gif 2>/dev/null ; done

real    0m8,951s
user    0m11,760s
sys     0m2,918s

TGA로 출력(~0.094초):

$ time for n in {1..100}; do compare -metric rmse foo.png bar.png out.tga 2>/dev/null ; done

real    0m4,623s
user    0m8,466s
sys     0m0,981s

NULL:(~0.067초) 로 출력 :

time for n in {1..100}; do compare -metric rmse foo.png bar.png NULL: 2>/dev/null ; done

real    0m1,967s
user    0m5,797s
sys     0m0,920s

결론적으로

PNG를 생성하는 것보다 약간 빠르지 만 출력하는 것이 NULL:다른 출력 형식보다 훨씬 빠릅니다. 이는 아마도 ImageMagick이 파일 쓰기 여부를 비교하기 위해 내부 diff 이미지를 생성해야 하고, 이를 PNG 파일로 인코딩하고 디스크에 쓰는 오버헤드가 내 작은 컴퓨터에서는 그다지 까다로운 것 같지 않기 때문일 것입니다. 테스트 케이스.

관련 정보