2013-04-17 3 views
2

저는 python의 pil 라이브러리를 사용하여 이미지를 표시하고 있습니다. 이제 동영상 콘텐츠로 표시 할 일련의 프레임이 있습니다. 모든 프레임의 RGB 값을 포함하는 np.array이 있습니다. Mathlabs implay과 비슷한 방법을 찾아서이 프레임을 표시 할 수 없습니다. 루프에서 imshow을 사용할 수는 있지만 프레임 속도를 언급해야하므로 매우 느릴 수 있습니다.Python과 NumPy를 사용하여 일련의 이미지보기

답변

0

OpenEXR로 구축 된 작동중인 OpenCV가 이미 설치되어있는 경우 - 그렇지 않은 경우 OpenCV를 다시 빌드하기위한 시간이 많이 필요합니다. 처음부터 소스에서 SciPy를 컴파일해야합니다. 그러나 라이브러리가 이미 있고 작동하고 있다면 Python 바인딩을 사용하여 신속하게 더 많은 상용구만으로도 이미지를 볼 수 있습니다. this example에서 : - 당신이 경우 그들은 서로 다른 양말 NumPy와 배열을있는 한 해당 객체에 의해 떨어져 무서워하지 않는

import OpenEXR, Imath, cv 
filename = "GoldenGate.exr" 
exrimage = OpenEXR.InputFile(filename) 

dw = exrimage.header()['dataWindow'] 
(width, height) = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1) 

def fromstr(s): 
    mat = cv.CreateMat(height, width, cv.CV_32FC1) 
    cv.SetData(mat, s) 
    return mat 

pt = Imath.PixelType(Imath.PixelType.FLOAT) 
(r, g, b) = [fromstr(s) for s in exrimage.channels("RGB", pt)] 

bgr = cv.CreateMat(height, width, cv.CV_32FC3) 
cv.Merge(b, g, r, None, bgr) 

cv.ShowImage(filename, bgr) 
cv.WaitKey() 

나는 OpenCV의 매트릭스 타입 memoryview 등을위한 파이썬 인터페이스를 구현 생각합니다.

†) 신속한 개발자 감각 : 개발자는 SciPy 애드온을 만들지 않고 파이썬 배열보기 C 인터페이스를 사용하여 즉시이 기능을 사용할 수 있습니다. OpenCV 행렬 구조체, 관련 파이썬 C API 토대, OpenEXR 형식 및 동일한 인터페이스의 재고 구현 등이 실용적인 의미에서 앞서 언급 한 것들로 구성되는 모든 것들과 마찬가지로 최적화 석탄에 대해 수년간 레이크되었습니다 주로이 분야에서 그들이 무엇을하고 있는지를 아는 전문가 학자들로 구성된 주목할만한 보조금 소대에 의해 이루어졌다.

+0

와우 될 것 디렉토리에 이미지의 목록을 보여주기 위해 밖으로 here

예를 사용해보십시오! 나는 실제로 저를 도울 수있는 방법이 있다고 생각했습니다. 이것은 무서워 보입니다! – change

+0

아하하 나는 당신을 놀라게 할 뜻이 없었습니다 ... 저는 OpenCV에 익숙했습니다. 그래서 이것은 나에게 NumPy 요리법의 더 큰 버전처럼 보입니다. 그것은 당신의 끝까지의 어떤 주어진 길보다 무서운 것이 아닙니다. 이렇게하는 방법은 다양합니다. 의심의 여지가 없습니다. - 내가 아는 한, 예를 들어 문맥에 관계없이 모두이 양의 rigamarole을 포함합니다.CTypes에서 SDL 곡면을 초기화하거나 PyQt 앱에서 QGraphicsView 바인딩을 하위 클래스로 만들거나 Matplotlib 동급 레시피를 호출하는 데 필요한 모든 비잔틴 오류를 호출합니다 (@ tom10은 답변에서 언급 한 것처럼) ... 기타 등등. 예! – fish2000

3

Matplotlib 애니메이션은 잘 작동하며 사용하기 쉽습니다. 합리적인 크기의 이미지의 경우 일반적으로 30fps 또는 그 주변에서 실행됩니다. Matplotlib 1.1+에는 새로운 애니메이션 인터페이스가 있습니다. 여기에 examplestutorial이 있습니다.

이전 버전의 matplotlib은 애니메이션을 적용하기가 어렵지 않습니다 (기본적으로 데이터를 직접 설정하고 플롯을 새로 고침). 애니메이션은 백엔드에서 조금 더 달라 지므로 적절한 예제를 찾아야합니다. 구체적인 예를 들어

, images는 애니메이션을 적용 할하기 matplotlib 된 이미지의 목록입니다, 당신은 간단하게 수행 할 수 있습니다 당신은 또한보고 싶다면

animation.ArtistAnimation(fig, images, interval=50, blit=True, repeat_delay=1000) 

이는, BTW, this example에서 가져옵니다 테스트 이미지를 생성하는 코드 애니메이션을 적용하는 코드는 위의 줄에 불과합니다.

0

나는 당신의 필요에 맞는 편리한 스크립트를 구현했습니다.

import os 
import glob 
from scipy.misc import imread 

img_dir = 'YOUR-IMAGE-DIRECTORY' 
img_files = glob.glob(os.path.join(video_dir, '*.jpg')) 

def redraw_fn(f, axes): 
    img_file = img_files[f] 
    img = imread(img_file) 
    if not redraw_fn.initialized: 
     redraw_fn.im = axes.imshow(img, animated=True) 
     redraw_fn.initialized = True 
    else: 
     redraw_fn.im.set_array(img) 
redraw_fn.initialized = False 

videofig(len(img_files), redraw_fn, play_fps=30) 
관련 문제