opencv(c++) opensuse linux 安装记录
官网教程地址
https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
-
解决依赖
- cmake
- g++
- wget
- unzip
- 官网只说了上面这几个依赖, 如果有依赖没解决, 可根据自己的系统使用搜索引擎
-
下载源码
wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip
-
解压
unzip opencv.zip unzip opencv_contrib.zip
-
创建构建目录并进入
mkdir -p build && cd build
-
配置
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../opencv-master
-
构建
cmake --build .
**注意:**在这个过程中需要从网上下载两个包, 但是呢, 在线下载网速实在感人。下面说一下解决方案:
这两个包分别是:
1. face_landmark_model.dat 下载地址: https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat 2. ippicv_2020_lnx_intel64_20191018_general.tgz 下载地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/ippicv/master_20191018/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz
这两个地址可以从它的构建文件中找到, 分别是CMakeLists.txt和ippicv.cmake, 找到相应的位置, 把链接拼接起来。
下载之后, 把在线下载地址改为离线地址, 例如:
CMakeLists.txt
set(the_description "Face recognition etc") ocv_define_module(face opencv_core opencv_imgproc opencv_objdetect opencv_calib3d # estimateAffinePartial2D() (trainFacemark) opencv_photo # seamlessClone() (face_swap sample) WRAP python java objc ) # NOTE: objdetect module is needed for one of the samples set(__commit_hash "8afa57abc8229d611c4937165d20e2a2d9fc5a12") set(__file_hash "7505c44ca4eb54b4ab1e4777cb96ac05") ocv_download( FILENAME face_landmark_model.dat HASH ${__file_hash} URL "${OPENCV_FACE_ALIGNMENT_URL}" "$ENV{OPENCV_FACE_ALIGNMENT_URL}" # "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/" # 改为下面的路径, 实际路径根据你自己来。 "file:///home/coffee/git/opencv_contrib-master/modules/face/face_landmark_model.dat" DESTINATION_DIR "${CMAKE_BINARY_DIR}/${OPENCV_TEST_DATA_INSTALL_PATH}/cv/face/" ID "data" RELATIVE_URL STATUS res ) if(NOT res) message(WARNING "Face: Can't get model file for face alignment.") endif()
ippicv.cmake
function(download_ippicv root_var) set(${root_var} "" PARENT_SCOPE) # Commit SHA in the opencv_3rdparty repo set(IPPICV_COMMIT "a56b6ac6f030c312b2dce17430eef13aed9af274") # Define actual ICV versions if(APPLE) set(OPENCV_ICV_PLATFORM "macosx") set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_mac") set(OPENCV_ICV_NAME "ippicv_2020_mac_intel64_20191018_general.tgz") set(OPENCV_ICV_HASH "1c3d675c2a2395d094d523024896e01b") elseif((UNIX AND NOT ANDROID) OR (UNIX AND ANDROID_ABI MATCHES "x86")) set(OPENCV_ICV_PLATFORM "linux") set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_lnx") if(X86_64) set(OPENCV_ICV_NAME "ippicv_2020_lnx_intel64_20191018_general.tgz") set(OPENCV_ICV_HASH "7421de0095c7a39162ae13a6098782f9") else() set(OPENCV_ICV_NAME "ippicv_2020_lnx_ia32_20191018_general.tgz") set(OPENCV_ICV_HASH "ad189a940fb60eb71f291321322fe3e8") endif() elseif(WIN32 AND NOT ARM) set(OPENCV_ICV_PLATFORM "windows") set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_win") if(X86_64) set(OPENCV_ICV_NAME "ippicv_2020_win_intel64_20191018_general.zip") set(OPENCV_ICV_HASH "879741a7946b814455eee6c6ffde2984") else() set(OPENCV_ICV_NAME "ippicv_2020_win_ia32_20191018_general.zip") set(OPENCV_ICV_HASH "cd39bdf0c2e1cac9a61101dad7a2413e") endif() else() return() endif() set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv") ocv_download(FILENAME ${OPENCV_ICV_NAME} HASH ${OPENCV_ICV_HASH} URL "${OPENCV_IPPICV_URL}" "$ENV{OPENCV_IPPICV_URL}" "file:///home/coffee/git/opencv-master/3rdparty/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz" # 改为自己的路径 DESTINATION_DIR "${THE_ROOT}" ID IPPICV STATUS res UNPACK RELATIVE_URL) if(res) set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE) endif() endfunction(
-
解决完上面的问题就可以开始下面的步骤了
# 编译安装一气呵成, 注意-j9选项 sudo make -j9 && make install
-
对于CLion来说需要配置CMakeLists.txt文件
# 指定opencv的头文件 include_directories(/usr/local/include/opencv4) # c++11 set(CMAKE_CXX_STANDARD 11) # 链接库 find_package( OpenCV REQUIRED ) include_directories( ${OpenCV_INCLUDE_DIRS} ) #执行项目 add_executable(test test.cpp ) target_link_libraries( test ${OpenCV_LIBS} )
-
示例
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; const String window_name = "Capture - face detection"; int main() { // 实例化 VideoCapture camera(0); int i = 0; while (true) { Mat frame; camera >> frame; // 这部分将int类型转换为string stringstream ss; ss << ++i; string str = ss.str(); //显示 imshow(window_name, frame); //构建保存路径 string save_path = "/home/coffee/shape/C++/test/image/" + str + ".png"; cout << save_path << endl; imwrite(save_path, frame); if (waitKey(33) == 27) break; // ESC 键退出 } // 释放 camera.release(); destroyWindow("camera"); return 0; }