2013-09-08 15 views
6

Non riesco a capire come visualizzare un'immagine grezza che contiene informazioni 640x480 pixel, ogni pixel 8 bit. (Immagine grigia)Opencv Python visualizza immagine raw

Ho bisogno di passare da un array np al formato Mat per poter visualizzare l'immagine.

#!/usr/bin/python 
import numpy as np 
import cv2 
import sys 
# Load image as string from file/database  
fd = open('flight0000.raw') 
img_str = fd.read() 
fd.close() 

img_array = np.asarray(bytearray(img_str), dtype=np.uint8) 

img = ... Conversion to Mat graycolor 

cv2.imshow('rawgrayimage', img) 
cv2.waitKey(0) 

È così confuso con il cv, cv2. Ho cercato per un po 'ora, ma non riesco a trovare la soluzione.

risposta

4

.RAW file non sono supportati in OpenCV see imread,

Ma il file può essere aperto con Python e analizzato con Numpy

import numpy as np 
fd = open('flight0000.raw', 'rb') 
rows = 480 
cols = 640 
f = np.fromfile(fd, dtype=np.uint8,count=rows*cols) 
im = f.reshape((rows, cols)) #notice row, column format 
fd.close() 

Questo fa una matrice NumPy che può essere manipolato direttamente da OpenCV

import cv2 
cv2.imshow('', im) 
cv2.waitKey() 
cv2.destroyAllWindows() 
+0

Nota: il mio esempio analizza una scala di grigi immagine - modificare l'argomento conteggio e la funzione rimodellare conseguenza per un'immagine a colori – DanGoodrick

-3

Solo un esempio, se si desidera salvare l'immagine 'crudo' al file 'png' (ogni pixel a 32 bit, immagine colorata):

import numpy as np 
import matplotlib.pyplot as plt 

img = np.fromfile("yourImage.raw", dtype=np.uint32) 
print img.size #check your image size, say 1048576 
#shape it accordingly, that is, 1048576=1024*1024 
img.shape = (1024, 1024) 

plt.imshow(img) 
plt.savefig("yourNewImage.png") 
0
#!/usr/bin/python 
#code to display a picture in a window using cv2 
import cv2 

cv2.namedWindow('picture',cv2.WINDOW_AUTOSIZE) 
frame=cv2.imread("abc.jpg") 
cv2.imshow('picture',frame) 
if cv2.waitKey(0) == 27: 
     cv2.destroyAllWindows()