所以,我寻求一种方法,使用rasbperry pi imageproc模块启用图像类型的opencv(cvmat for cv,numpyarray for cv2,..) 提前致谢
答案 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
尺寸或像素时崩溃,则问题可能出在图像捕获代码中。如果您在问题中显示最小示例,则问题更容易调试。