2017-01-16 78 views
0

我的Ubuntu 14.04默認安裝了OpenCV 2.4.8,而且我還有一個手工構建的OpenCV 2.4.11,我需要cv::fisheye類,我使用cmake構建這些類來生成我的執行文件問題是我使用ROS,它也默認爲2.4.8,但我需要鏈接到2.4.11。這個破解我在的地方是:強制cmake使用特定的OpenCV版本

find_package(OpenCV REQUIRED) 
# Needed to force OpenCV 2.4 to link with 2.4.11 
#message("Initial value for ${OpenCV_VERSION}: ${OpenCV_LIBS}") 
if(OpenCV_VERSION VERSION_LESS "3.0") 
    set(OpenCV_VERSIONED_LIBS "") 
    macro(set_opencv_version version) 
    foreach(LIB_FILE ${ARGN}) 
     set(OpenCV_VERSIONED_LIBS ${OpenCV_VERSIONED_LIBS} :lib${LIB_FILE}.so.${version}) 
    endforeach() 
    endmacro() 
    set_opencv_version("2.4.11" ${OpenCV_LIBS}) 
else() 
    set(OpenCV_VERSIONED_LIBS ${OpenCV_LIBS}) 
endif() 
#message("Updated value: ${OpenCV_VERSIONED_LIBS}") 

target_link_libraries(my_fisheye_application 
    ${OpenCV_VERSIONED_LIBS} 
    ${catkin_LIBRARIES} 
    cv_bridge # This by default pulls in OpenCV 2.4.8 libraries 
    # ...etc... 
) 

由於這個腳本需要在不同的機器,並用OpenCV的3.0以及2.4.11工作,我真的不能做關於使用目錄中的任何假設。有一個更好的方法嗎?

+1

'的問題是,我使用ROS,它也默認爲2.4.8,但我需要與2.4.11鏈接。「 - 請詳細說明這一點。如果你的軟件包中沒有其他東西直接間接地「find_package(OpenCV)」,你可以使用'find_package(OpenCV 2.4.11 REQUIRE)',所以它至少會找到* 2.4.11 *版本的OpenCV。如果還有其他OpenCV用戶,並且您可能不會影響其代碼,請按照[FindOpenCV.cmake](https://github.com/veter-team/cmake-modules)文檔部分中的描述設置「OpenCV_DIR」變量/blob/master/windows/FindOpenCV.cmake)模塊。 – Tsyvarev

+0

默認情況下''cv_bridge'模塊拉入'2.4.8' - 讓我在。 –

+0

上加上''cv_bridge模塊默認拉入2.4.8'我明白'cv_bridge'模塊使用OpenCV能夠找到。當您的系統上安裝了'2.4.8'版本時,模塊將採用此版本。我對嗎?如果是這樣,設置'OpenCV_DIR'變量(例如,作爲參數cmake:'cmake -DOpenCV_DIR = '應強制'cv_bridge'和你的模塊使用OpenCV 2.4.11。 – Tsyvarev

回答

3

如果您想強制CMake(FindOpenCV模塊)搜索與安裝的軟件包/系統不同的OpenCV庫,您需要將OpenCV_ROOT_DIR變量設置爲要使用的OpenCV樹的基礎目錄。

而且,因爲你至少需要OpenCV庫的一個特定的最低版本,這是更好地說明它在find_package()函數,如下所示:

find_package(OpenCV 2.4.11 REQUIRED) 
相關問題