" cv2.imdecode(numpyArray,cv2.CV_LOAD_IMAGE_COLOR)"返回无

时间:2014-10-28 14:58:29

标签: python opencv numpy ros

我正在尝试将图像转换为Opencv(转换为numpy数组)并使用该数组通过ROS节点发布消息。我试过通过以下代码

做同样的事情
    fig.canvas.draw()
    nparr = np.fromstring ( fig.canvas.tostring_argb(), np.uint8 )
    print nparr
    img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)
    print img_np
    image_message = bridge.cv2_to_imgmsg(img_np, encoding="passthrough")
    pub.publish(image_message)

但是,当我尝试这样做时,我收到一条错误消息

AttributeError: 'NoneType' object has no attribute 'shape'

所以,我尝试打印值为[255 191 191 ..., 191 191 191]的numpy数组的值。我不明白的是img_np值为None。我不知道哪里出错了。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

我最近遇到过类似的问题。

np.fromstring()方法从参数字符串返回 1-D np.array,无论原始资源如何。要在OpenCV中将np.array用作图像数组,您可能需要根据图像的宽度和高度对其进行整形。

试试这个:

img_str = np.fromstring ( fig.canvas.tostring_argb(), np.uint8 )
ncols, nrows = fig.canvas.get_width_height()
nparr = np.fromstring(img_str, dtype=np.uint8).reshape(nrows, ncols, 3)
img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)