IPLImage (opencv) and Nnmpy Array converter
just copied from
http://opencv.willowgarage.com/wiki/PythonInterface
save the following code as adaptor.py
import cv
import numpy as np
def cv2array(im):
depth2dtype = {
cv.IPL_DEPTH_8U: 'uint8',
cv.IPL_DEPTH_8S: 'int8',
cv.IPL_DEPTH_16U: 'uint16',
cv.IPL_DEPTH_16S: 'int16',
cv.IPL_DEPTH_32S: 'int32',
cv.IPL_DEPTH_32F: 'float32',
cv.IPL_DEPTH_64F: 'float64',
}
arrdtype=im.depth
a = np.fromstring(
im.tostring(),
dtype=depth2dtype[im.depth],
count=im.width*im.height*im.nChannels)
a.shape = (im.height,im.width,im.nChannels)
return a
def array2cv(a):
dtype2depth = {
'uint8': cv.IPL_DEPTH_8U,
'int8': cv.IPL_DEPTH_8S,
'uint16': cv.IPL_DEPTH_16U,
'int16': cv.IPL_DEPTH_16S,
'int32': cv.IPL_DEPTH_32S,
'float32': cv.IPL_DEPTH_32F,
'float64': cv.IPL_DEPTH_64F,
}
try:
nChannels = a.shape[2]
except:
nChannels = 1
cv_im = cv.CreateImageHeader((a.shape[1],a.shape[0]),
dtype2depth[str(a.dtype)],
nChannels)
cv.SetData(cv_im, a.tostring(),
a.dtype.itemsize*nChannels*a.shape[1])
return cv_im
Sample cod: Yellow image
import cv
import numpy
import adaptor
capture = cv.CaptureFromCAM(0)#CreateCameraCapture(0)
cv.NamedWindow("Test", cv.CV_WINDOW_AUTOSIZE)
while 1:
img = cv.QueryFrame(capture)
array = adaptor.cv2array(img)
array[:, :, 0] = 0
cv.ShowImage("Test", adaptor.array2cv(array))
c = cv.WaitKey(2)
if c ==ord('q'):
break
You really saved me.
返信削除