원시 이진 데이터를 주어진 너비와 높이의 이미지로 보는 방법은 무엇입니까?


15

원시 바이너리 데이터를 표시 할 수있는 Linux 용 프로그램이 있습니까?

이진 파일의 각 바이트는 픽셀을 나타내므로 내가 말할 수있는 곳에 이와 같은 것이 있으면 매우 유용합니다.

program_name --input=dat001.bin --width=200 --height=100

픽셀이 표시됩니다.

gnuplot이 이것에 사용될 수 있는지 궁금합니다 ...?


2
질문은 말이되지 않습니다. 원시 이진 데이터를 표시하려면 사람이 읽을 수있는 형식으로 변환해야합니다. 일반적으로이 양식은 16 진수이며 서식을 지정하는 hd데 사용할 수 있습니다 . 그런 다음 이미지를 보도록 요청합니다. 이미지 인 경우 이미지 형식은 최소한 bmp와 같으며 형식, 너비, 높이, 색 깊이를 식별하는 헤더가 있고 색상 팔레트가 있어야합니다. 붙여진.
psusi

@psusi 제목이 더 나을지 모르지만 , 원시 픽셀 데이터를 표시하는 방법 은이 질문의 의도가 분명하고 나에게 의미가 있습니다. ( "이미지 메타 데이터를 지정할 수있는 프로그램을 원합니다.") 당신에게 후시 (또는 편집 후)가 더 의미가 있습니까?
Nathan Kidd

@NathanKidd, ahh, yes .. 당신이 특정 형식을 사용하는 이미지이지만 임의의 이진 데이터가 아니라 헤더가없는 것을 알고 있다면 ...
psusi


그것에는 FFmpeg 수 있습니다 stackoverflow.com/a/15037011/5447906
anton_rh

답변:


12

"원시 바이너리 데이터"를 보려면 16 진수 덤프 명령을 사용 hd하거나hexdump

$ hd -C a.txt
00000000 61 0a 61 61 0a 61 61 61 0a 61 61 61 61 0a 61 61 | a.aa.aaa.aaaa.aa |
00000010 61 61 61 0a 62 62 62 0a 62 62 62 62 0a 62 62 62 | aaa.bbb.bbbb.bbb |
00000020 62 62 0a 3c 62 65 67 69 6e 3e 0a 61 61 61 61 61 | bb. <시작> .aaaaa |
00000030 61 0a 61 61 61 61 61 61 61 61 0a 61 61 61 61 61 61 | a.aaaaaaa.aaaaaa |
00000040 61 61 0a | aa. |
00000043

구조화되지 않은 바이트로 구성된 이미지 형식을 모릅니다. 데이터가 8 비트 RGB 값입니까? 파일에 30000 바이트가 포함 된 경우 100x100 픽셀의 RGB 또는 50x200 픽셀의 RGB 또는 200x50 픽셀의 RGB 또는 다른 것입니까? 팔레트가 있습니까? 데이터 구성에 대해 알아야합니다!

이미지로 보려면 NetPBM 유틸리티 또는 ImageMagick 을 사용하여 이미지 뷰어가 이해하는 형식으로 변환합니다.

위의 작업을 수행 할 수없는 경우 작은 Perl 스크립트 작성을 조사했습니다.


어디서 구할 수 있습니까? 방금 yum search hdFedora 데스크탑에서 작업을 수행했지만 해당 기능이 없었습니다.
Sandra

괜찮아. 나는 pxiels를 그래픽으로 볼 필요가있다.
Sandra

2
이진 파일이 호출 될 수 있습니다 hexdump. SuSE에서는 util-linux패키지 안에 있습니다.
Turbo J

그것은 또한 hexdump아치에 있습니다.
Sparhawk


10

convertImageMagick에서 할 수 있습니다.

예를 들어, 8 비트 2x3 그레이 스케일 :

printf '\x00\xFF\x88\xFF\x00\xFF' > f

그때:

convert -depth 8 -size 3x2+0 gray:f out.png

명령 설명 :

  • -depth 8: 각 색상에는 8 비트가 있습니다.
  • -size 2x3+0: 2x3이미지. +0파일에서 오프셋 0에서 시작하는 것을 의미합니다. 메타 데이터 헤더가있는 경우 오프셋으로 생략 할 수 있습니다.
  • gray:f: 입력 파일은 f이고 형식은 http://www.imagemagick.org/script/formats.php에gray 정의되어 있습니다 . ImageMagick은 일반적으로 확장자에서 형식을 결정하기 때문에이 이상한 표기법이 사용되지만 여기에는 확장자가 없습니다. .

문제는 이제 출력을 보는 방법입니다. 직접 eog:

eog out.png

이미지가 너무 작아서 많이 확대하지 않으면 eog픽셀을 혼합하는 디스플레이 알고리즘을 사용하므로 대부분의 사진에는 더 좋지만 우리의 경우에는 그렇지 않습니다. 나는 두 가지 가능성을 발견했다.

  • gimp out.png. 이미지 편집기는 모든 단일 픽셀을 표시해야합니다.
  • convert out.png -scale 300x200 out2.png. mixels 픽셀 은 기본적으로 훨씬 많이 위로하기 때문에 -scale대신 에을 (를) 사용해야 합니다.-resize-resizeeog

산출:

여기에 이미지 설명을 입력하십시오

RGB 예 :

printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > f
convert -depth 8 -size 3x1+0 rgb:f out.png

여기에 이미지 설명을 입력하십시오

Ubuntu 16.04, ImageMagick 6.8.9에서 테스트되었습니다.


1
또 다른 예 : RGBA 형식의 파일 (예 :)이 /tmp/tex1.dat있는 경우 Imagemagick을 사용하여 변환 된 이미지 display를 128x256 픽셀 이미지로 직접 볼 수 있습니다.display -depth 8 -size 128x256+0 RGBA:/tmp/tex1.dat
sdaau

픽셀에 10 비트 12 비트가 있으면 어떻게됩니까? 나는 -endian옵션 을 시도했지만 그것이 작동하는 것 같습니다 -depth 16, 이미지가 매우 어둡습니다
sop

@sop 10 12에 대해 잘 모르겠습니다. 12는 깊이 12에서 작동 할 수 있습니까? 10 10을 4 (RGBA) 나 3 (RGB)로 나눌 수 없으므로 채널당 몇 비트를 더 지정해야한다고 생각합니다. 방법을 잘 모르겠습니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

4

직접 보지 않고 변환하려는 경우 변환 유틸리티가 다음을 수행 할 수 있습니다.

320 x 200 픽셀, 8 비트 회색, 헤더 0을 가정하고 stdin에서 읽으려면 PNG 형식으로 pic.png에 저장하십시오.

convert -depth 8 -size 320x200+0 gray:- pic.png

1
나와 같은 newbs의 경우 : gray:-형식 gray-stdin의 의미를 의미합니다 . 따라서 현재 명령이 stdin을 기다리는 동안 정지됩니다. 나는 내 대답에 대해 더 설명했다 : superuser.com/a/978432/128124
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.