2014-10-28 89 views
1

我試圖將圖像轉換爲Opencv(轉換爲numpy數組),並使用該數組將消息發佈到ROS節點上。我試圖通過下面的代碼「cv2.imdecode(numpyArray,cv2.CV_LOAD_IMAGE_COLOR)」返回無

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。我不知道我錯在哪裏。任何幫助表示讚賞。

回答

1

我最近遇到類似問題。

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)