2011-03-31 7 views
2

누구나 디스크에 먼저 쓰지 않고도 PythonMagick.Image 인스턴스에서 픽셀 데이터를 가져 오는 방법을 알고 있습니까?PythonMagick 이미지에서 픽셀 데이터 가져 오기?

import PythonMagick 
im = PythonMagick.Image('image.jp2') 

내가 지금은 다른 NumPy와 나하기 matplotlib 같은에서 사용할 수 있도록 압축 해제 된 이미지 데이터를 얻을 수 있도록하고 싶습니다 :하지만, 예를 들어

, 내가 사용하여 이미지에서 읽을 수 있습니다 나는 이것을 할 어떤 방법을 찾을 수없는 것 같습니다. 나는 matplotlib 나 PIL을 직접 사용 하겠지만, 내가 읽고있는 이미지 포맷은 JPEG 2000 뿐이다. 내가 아는 한 PythonMagick 만 지원한다.

제안 사항?

답변

3

면책 조항 : 저는 지금 당장 어디서나 전문가가 아니기 때문에 (1) 다음 중 일부 또는 전부가 틀릴 수도 있습니다. (2) 분명히 당신보다 덜 구체적 일 것입니다. (3) 다른 사람이 잘 아는 사람이라면 이미 응답을 보면서 연기하지 않기를 바란다. 어쨌든 :

Image 클래스의 pixelColor 메서드를 사용하여 픽셀 값을 하나씩 읽을 수있는 것처럼 보입니다. 그러면 R, G, B 구성 요소를 추출 할 수있는 PythonMagick.Color 값이 반환됩니다. 기본 C++ 라이브러리는 Image::writePixels을 사용하여 한 번에 많은 픽셀을 읽는 것을 지원합니다.이 또한 PythonMagick.Image에 있습니다. 하지만 그 방법의 적절한 사용은 PythonMagick에서 구현되지 않은 다른 것들에 달려 있다고 생각합니다. 한 번에 한 픽셀 씩 읽는 것보다 훨씬 효율적이었을 거라고 생각합니다.

이미지의 내용을 메모리에있는 PythonMagick.Blob 객체에 쓸 수있는 것처럼 보입니다. 이는 기본적으로 파일없이 파일에만 쓰는 것과 같습니다 .-)). 파일에 쓸 때와 마찬가지로 작성해야하는 형식을 선택할 수 있습니다. Blob의 내용을 추출하는 데는 get_blob_data이있는 것으로 보입니다. 이런 식으로 뭔가 :

im = PythonMagick.Image('image.jp2') 
blob = PythonMagick.Blob() 
im.write(blob, "png") 
data = PythonMagick.get_blob_data(blob) 

결과 data 누구 바이트 이미지의 이진 표현이다 파이썬 문자열 내 생각이다. (저는 파이썬 2.x를 사용하고 있다고 가정합니다. 문자열 타입은 8 비트입니다. 파이썬 매기 크릭이 3.x에서 작동하는지 여부는 모르겠습니다.) 기본적으로 원시 픽셀 데이터 인 몇 가지 형식이 있다고 생각합니다. "RGB"를 시도하십시오. 그런 다음 struct.unpack 또는 기타의 롯트를 통해 내용을 추출 할 수 있습니다.

+0

제안에 감사드립니다. Gareth. get_blob_data 메소드가있는 PythonMagick의 어떤 버전을 찾았습니까? 현재 우분투 저장소에서 0.9.1 버전을 사용하고 있습니다. numpy는 이미 배열 형식 (http://dmr.ath.cx/gfx/python/)에 입력 될 것으로 예상하므로 궁극적으로 픽셀 반복기를 사용해야 할 수도 있습니다. –

+0

ImageMagick 웹 사이트에서 최신 버전의 소스 코드를보고 있다고 생각합니다. 그것은 내가 어떻게 든 그것을 오해했을 가능성이 완전히 있습니다 - 내가 말했듯이, 나는 PythonMagick 전문가가 아니다. –

+0

작동 : open ("foo.png", "wb"). write (blob.data) get_blob_data()를 호출 할 필요가 없습니다 .... –

관련 문제