在SLAM十四講的代碼編譯過程中direct_method.cpp和optical_flow.cpp有CV_GRAY2BGR語句的報錯 這是因為CV_GRAY2BGR是opencv2的用法,而slambook2的的cmakelist.txt中opencv的庫用的是opencv4, 因此要將CV_GR ...
在SLAM十四講的代碼編譯過程中direct_method.cpp
和optical_flow.cpp
有CV_GRAY2BGR
語句的報錯
這是因為CV_GRAY2BGR
是opencv2的用法,而slambook2的的cmakelist.txt中opencv的庫用的是opencv4,
因此要將CV_GRAY2BGR
改為cv::COLOR_BGR2GRAY
,這是用來將彩色圖轉換灰度圖的,之後就可以順利編譯
但是編譯之後,在運行代碼的時候會出現英文報錯,意思是輸入的圖片通道數無效,(核心已轉儲)
這是因為在slambook2的ch8中提供的圖片本身就是單通道的灰度圖,不需要進行轉換,因此只需要將相應的代碼
註釋,再修改一下就好了。修改如下:
兩個cpp文件中的有關彩色圖轉換的代碼都需要修改,否則都會報錯。
// cv::cvtColor(img2, img2_CV, cv::COLOR_BGR2GRAY);
註釋掉這句
img2.copyTo(img2_CV);
直接將輸入的圖像拷貝給img2
另外圖片路徑問題,由於再編譯的時候我們會習慣mkdir一個build文件夾,編譯到這個文件夾里,因此再運行時
可以將direct_method和optical_flow複製到ch8文件里,然後運行,或者在代碼里將圖片路徑的代碼修改一下
例如:string left_file = "./left.png";
改為string left_file = "../left.png";