我們有一個使用image_transport訂閱圖像的話題,將其轉換爲OpenCV的類型,然後在內部使用了OpenCV直接與圖像工作靛藍包。該場景與Using CvBridge To Convert Between ROS Images And OpenCV Images教程的示例ROS節點幾乎相同。
有作爲ROS的靛藍opencv3被安裝在系統上,一旦有幾個問題。我們花了一些時間才弄明白,因爲opencv3軟件包作爲另一個軟件包的依賴項安裝在一個完全不同的項目中。
1 - 在http://wiki.ros.org/vision_opencv#Using_OpenCV_in_your_ROS_code CMake的片段中的線
find_package(OpenCV REQUIRED)
總是發現在/ opt/ROS /靛藍OpenCV的3安裝從現在開始,這是不好的。我們觀察到所有類型的後果,包括編譯錯誤,鏈接器錯誤,段錯誤,特別是與ros-indigo-cv-bridge相結合,這與OpenCV 2.4.8的系統安裝相關。
2 - 解決方法是添加一個特定版本的要求,像
find_package(OpenCV 2.4.8 EXACT REQUIRED)
還是要靠cv_bridge或image_geometry作爲ROS indigo migration guide推薦鏈接到正確版本的OpenCV的間接影響。
即使您以某種方式可以避免cmake在/ opt/ros/indigo中選擇OpenCV 3安裝,預處理器仍然會更喜歡/ opt/ros/include/opencv2中找到的頭文件(由ros-indigo- opencv3)在/ usr/include目錄上只要找到一個
#include <opencv2/core/core.hpp>
像cv_bridge.h:43,因爲有些依存度將始終將/ opt/ROS /靛藍到包括路徑從現在開始/ opencv2。
我迄今發現的唯一的解決方法是以下cmake的片段:
find_package(OpenCV 2.4.8 EXACT REQUIRED)
include_directories(
include
${OpenCV_INCLUDE_DIRS} # /usr/include/opencv;/usr/include
${catkin_INCLUDE_DIRS} # contains /opt/ros/indigo/include
# ...other include directories
)
確保OpenCV的2.4.8頭在/ usr /包括任何其它軟件包的頭前是有序的。
ROS玉石的情況可能相同。
好的。我將在大約30分鐘後回家,以便了解這是否是這裏發生的事情。我完全重新安裝了ros和opencv,發現desktop-full不包括ros-jade-opencv-3,所以我打算看看這個軟件包不存在是否會起作用。 – ThaHypnotoad
雖然我會檢查兩個,所以我應該在大約一個半小時後回來,結果或缺乏。 – ThaHypnotoad
我只想提一下:謝謝你的文字牆。很難找到很多ROS的凝聚力文獻。現在是更新。只是沒有安裝ros的3.1庫讓我的東西變得花哨。 (正如你所提到的,依靠cv_bridge來導入它)現在當然,如果我想在3.0和3.1中使用奇特的新表面匹配工具,我該怎麼辦?這似乎有點難以處理。我將把這個答案標記爲更新併爲此提出一個單獨的問題。再次感謝。 – ThaHypnotoad