【发布时间】:2023-03-29 02:35:02
【问题描述】:
rasbperry pi 中的 imageproc 模块非常高效,但我无法使用 opencv 由于与 imageproc 模块相关的图像类型不同。
所以,我寻求一种方法来启用图像类型的 opencv(cvmat 用于 cv,numpyarray 用于 cv2,..)与 rasbperry pi imageproc 模块 提前致谢
【问题讨论】:
标签: python opencv raspberry-pi
rasbperry pi 中的 imageproc 模块非常高效,但我无法使用 opencv 由于与 imageproc 模块相关的图像类型不同。
所以,我寻求一种方法来启用图像类型的 opencv(cvmat 用于 cv,numpyarray 用于 cv2,..)与 rasbperry pi imageproc 模块 提前致谢
【问题讨论】:
标签: python opencv raspberry-pi
您首先必须将imgproc 输出转换为numpy.array。之后,您几乎可以直接将数组与cv2 一起使用。
如果我们假设您在img 中有您的imgproc 图像,那么:
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 尺寸或像素时崩溃,则问题可能出在图像捕获代码中。如果您在问题中显示一个最小示例,则问题更容易调试。
【讨论】:
img_array = ...),它还会崩溃吗?您是否验证过您的 OpenCV 可以正常工作?如果您编辑您的问题以使其包含崩溃代码的最小示例,这将有所帮助。