“cv2.imdecode(numpyArray,cv2.CV_LOAD_IMAGE_COLOR)”返回Non

2024-03-28 10:03:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个图像转换成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'

所以,我尝试打印两个numpy数组的值,它们的值都是[255 191 191 ..., 191 191 191]。我不明白的是img_np值是None。我不知道我哪里做错了。如有任何帮助,我们将不胜感激。


Tags: 图像imagenumpymessageimg节点npfig
1条回答
网友
1楼 · 发布于 2024-03-28 10:03:56

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

np.fromstring()方法从参数字符串返回1-Dnp.array,而不管原始资源是什么。要将np.array用作OpenCV中的图像数组,可能需要根据图像的宽度和高度对其进行整形。

试试这个:

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)

相关问题 更多 >