从覆盆子pi的imgproc模块图像转换为(numpy数组或cvmat)

时间:2014-06-25 20:04:59

标签: python opencv raspberry-pi

rasbperry pi中的imageproc模块非常有效但我无法使用opencv 由于与imageproc模块相关的图像类型不同。

所以,我寻求一种方法,使用rasbperry pi imageproc模块启用图像类型的opencv(cvmat for cv,numpyarray for cv2,..) 提前致谢

1 个答案:

答案 0 :(得分:0)

您首先必须将imgproc输出转换为numpy.array。之后,您几乎可以直接使用cv2数组。

如果我们假设您在imgproc中有img张图片,那么:

import numpy

img_array = numpy.array([ [ img[x,y] for x in range(img.width) ] for y in range(img.height) ] , dtype='uint8')

不幸的是,imgproc中没有更快的数据访问方法,您必须逐个进行。但是,在这种缓慢的循环之后,您可以img_array直接使用cv2


如果崩溃(它不应该)与段错误(它真的不应该),可能会在imgproc中出现严重错误。最好的猜测是img[x,y]指向imgproc创建的图像之外。为了调试这个,让我们将命令分成更可口的部分。

# dimensions ok?
w = img.width
h = img.height
print w,h

# can we fetch pixels at the extremes?
upperleft = img[0,0]
lowerright = img[w-1, h-1]
print upperleft, lowerright

# the loop without conversion to array
img_l = [ [ img[x,y] for x in range(w) ] for y in range(h) ]
print len(img_l)

# convert the image into an array
img_array = numpy.array(img_l, dtype='uint8')
print img_array.shape

这次崩溃在哪里?请注意,print语句在所有平台上的段错误都不完全可靠,但它表明代码至少运行了这么远。

如果代码在访问img尺寸或像素时崩溃,则问题可能出在图像捕获代码中。如果您在问题中显示最小示例,则问题更容易调试。