init
This commit is contained in:
parent
3edd93faef
commit
e72c2ba259
|
|
@ -1,5 +1,8 @@
|
||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
|
||||||
|
include(cmake/find_opencv.cmake)
|
||||||
|
auto_find_opencv(ON)
|
||||||
|
|
||||||
project(cmake_template)
|
project(cmake_template)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,243 @@
|
||||||
|
###
|
||||||
|
# 配置并下载opencv进行编译
|
||||||
|
###
|
||||||
|
|
||||||
|
set(ENV{http_proxy} "http://127.0.0.1:1080")
|
||||||
|
set(ENV{https_proxy} "http://127.0.0.1:1080")
|
||||||
|
|
||||||
|
function(auto_download_opencv_contrib opencv_contrib_path module_path)
|
||||||
|
set(cache_path ${CMAKE_CURRENT_BINARY_DIR}/.cache)
|
||||||
|
if (EXISTS ${cache_path}/opencv_contrib.zip)
|
||||||
|
message(STATUS "opencv_contrib.zip exists, skip download")
|
||||||
|
else()
|
||||||
|
message(STATUS "opencv_contrib.zip not exists, download it")
|
||||||
|
message(STATUS "opencv_contrib_path not exists, download it")
|
||||||
|
# https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.zip v4.8.0
|
||||||
|
set(opencv_contrib_url "https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.zip")
|
||||||
|
file(DOWNLOAD ${opencv_contrib_url} ${cache_path}/opencv_contrib.zip SHOW_PROGRESS LOG ${cache_path}/opencv_contrib.log)
|
||||||
|
endif()
|
||||||
|
if (EXISTS ${cache_path}/opencv_contrib-4.8.0/modules)
|
||||||
|
message(STATUS "opencv_contrib_path exists, skip unzip")
|
||||||
|
else()
|
||||||
|
message(STATUS "opencv_contrib_path not exists, unzip it")
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${cache_path}/opencv_contrib.zip WORKING_DIRECTORY ${cache_path})
|
||||||
|
endif()
|
||||||
|
if(NOT EXISTS ${cache_path}/opencv_contrib-4.8.0/modules)
|
||||||
|
message(FATAL_ERROR "opencv_contrib install faild")
|
||||||
|
endif()
|
||||||
|
set(${opencv_contrib_path} ${cache_path}/opencv_contrib-4.8.0 PARENT_SCOPE)
|
||||||
|
set(${module_path} ${cache_path}/opencv_contrib-4.8.0/modules PARENT_SCOPE)
|
||||||
|
endfunction(auto_download_opencv_contrib)
|
||||||
|
|
||||||
|
function(auto_download_opencv opencv_path)
|
||||||
|
set(cache_path ${CMAKE_CURRENT_BINARY_DIR}/.cache)
|
||||||
|
if (EXISTS ${cache_path}/opencv.zip)
|
||||||
|
message(STATUS "opencv.zip exists, skip download")
|
||||||
|
else()
|
||||||
|
message(STATUS "opencv.zip not exists, download it")
|
||||||
|
# https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip v4.8.0
|
||||||
|
set(opencv_url "https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip")
|
||||||
|
file(DOWNLOAD ${opencv_url} ${cache_path}/opencv.zip SHOW_PROGRESS LOG ${cache_path}/opencv.log)
|
||||||
|
endif()
|
||||||
|
if (EXISTS ${cache_path}/opencv-4.8.0/modules)
|
||||||
|
message(STATUS "opencv_path exists, skip unzip")
|
||||||
|
else()
|
||||||
|
message(STATUS "opencv_path not exists, unzip it")
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${cache_path}/opencv.zip WORKING_DIRECTORY ${cache_path})
|
||||||
|
endif()
|
||||||
|
if(NOT EXISTS ${cache_path}/opencv-4.8.0/modules)
|
||||||
|
message(FATAL_ERROR "opencv install faild")
|
||||||
|
endif()
|
||||||
|
set(${opencv_path} ${cache_path}/opencv-4.8.0 PARENT_SCOPE)
|
||||||
|
endfunction(auto_download_opencv)
|
||||||
|
|
||||||
|
function(build_opencv_and_contrib opencv_path opencv_contrib_modules_path)
|
||||||
|
if(NOT EXISTS ${opencv_path})
|
||||||
|
message(FATAL_ERROR "opencv_path not exists :${opencv_path}")
|
||||||
|
endif()
|
||||||
|
if(NOT EXISTS ${opencv_contrib_modules_path})
|
||||||
|
message(FATAL_ERROR "opencv_contrib_modules_path not exists :${opencv_contrib_modules_path}")
|
||||||
|
endif()
|
||||||
|
#if(EXISTS ${opencv_path}/build/install)
|
||||||
|
# message(STATUS "opencv already builded")
|
||||||
|
# return()
|
||||||
|
#endif()
|
||||||
|
|
||||||
|
set(BUILD_IPP_IW ON)
|
||||||
|
set(BUILD_ITT ON)
|
||||||
|
set(BUILD_JAVA OFF)
|
||||||
|
set(BUILD_PERF_TESTS OFF)
|
||||||
|
set(BUILD_SHARED_LIBS ON)
|
||||||
|
set(BUILD_TBB OFF)
|
||||||
|
set(BUILD_TESTS OFF)
|
||||||
|
set(BUILD_PYTHON OFF)
|
||||||
|
set(BUILD_EXAMPLES OFF)
|
||||||
|
|
||||||
|
set(BUILD_opencv_apps OFF)
|
||||||
|
set(BUILD_opencv_aruco OFF)
|
||||||
|
set(BUILD_opencv_bgsegm OFF)
|
||||||
|
set(BUILD_opencv_bioinspired OFF)
|
||||||
|
set(BUILD_opencv_calib3d ON)
|
||||||
|
set(BUILD_opencv ccalib OFF)
|
||||||
|
set(BUILD_opencv_core ON)
|
||||||
|
set(BUILD_opencv_datasets OFF)
|
||||||
|
set(BUILD_opencv_dnn OFF)
|
||||||
|
set(BUILD_opencv_dnn_objdetect OFF)
|
||||||
|
set(BUILD_opencv_dnn_superres OFF)
|
||||||
|
set(BUILD_opencv_dpm OFF)
|
||||||
|
set(BUILD_opencv_face OFF)
|
||||||
|
set(BUILD_opencv_features2d ON)
|
||||||
|
set(BUILD_opencv_flann ON)
|
||||||
|
set(BUILD_opencv_fuzzy OFF)
|
||||||
|
set(BUILD_opencv_gapi OFF)
|
||||||
|
set(BUILD_opencv_hfs OFF)
|
||||||
|
set(BUILD_opencv_highgui OFF)
|
||||||
|
set(BUILD_opencv_img_hash OFF)
|
||||||
|
set(BUILD_opencv_imgcodecs ON)
|
||||||
|
set(BUILD_opencv_imgproc ON)
|
||||||
|
set(BUILD_opencv_intensity_transform OFF)
|
||||||
|
set(BUILD_opencv java_bindings_generator OFF)
|
||||||
|
set(BUILD_opencv_js OFF)
|
||||||
|
set(BUILD_opencv js_bindings_generator OFF)
|
||||||
|
set(BUILD_opencv_line_descriptor OFF)
|
||||||
|
set(BUILD_opencv_mcc OFF)
|
||||||
|
set(BUILD_opencv_ml OFF)
|
||||||
|
set(BUILD_opencv_objc_bindings_generator OFF)
|
||||||
|
set(BUILD_opencv_objdetect OFF)
|
||||||
|
set(BUILD_opencv_optflow OFF)
|
||||||
|
set(BUILD_opencv_phase_unwrapping OFF)
|
||||||
|
set(BUILD_opencv_photo OFF)
|
||||||
|
set(BUILD_opencv_plot ON)
|
||||||
|
set(BUILD_opencv_python_bindings_generator OFF)
|
||||||
|
set(BUILD_opencv_python_tests OFF)
|
||||||
|
set(BUILD_opencv_quality OFF)
|
||||||
|
set(BUILD_opencv_rapid OFF)
|
||||||
|
set(BUILD_opencv_reg OFF)
|
||||||
|
set(BUILD_opencv_rgbd OFF)
|
||||||
|
set(BUILD_opencv_saliency OFF)
|
||||||
|
set(BUILD_opencv_shape OFF)
|
||||||
|
set(BUILD_opencv_stereo OFF)
|
||||||
|
set(BUILD_opencv_stitching OFF)
|
||||||
|
set(BUILD_opencv_structured_light OFF)
|
||||||
|
set(BUILD_opencv_superres OFF)
|
||||||
|
set(BUILD_opencv_surface_matching OFF)
|
||||||
|
set(BUILD_opencv_text OFF)
|
||||||
|
set(BUILD_opencv_tracking ON)
|
||||||
|
set(BUILD_opencv_ts OFF)
|
||||||
|
set(BUILD_opencv_video ON)
|
||||||
|
set(BUILD_opencv_videoio ON)
|
||||||
|
set(BUILD_opencv_videostab OFF)
|
||||||
|
set(BUILD_opencv_wechat_qrcode OFF)
|
||||||
|
set(BUILD_opencv_world OFF)
|
||||||
|
set(BUILD_opencv_xfeatures2d ON)
|
||||||
|
set(BUILD_opencv_ximgproc OFF)
|
||||||
|
set(BUILD_opencv_xobjdetect OFF)
|
||||||
|
set(BUILD_opencv_xphoto OFF)
|
||||||
|
|
||||||
|
set(OPENCV_ENABLE_NOFREE ON)
|
||||||
|
set(OPENCV_EXTRA_MODULES_PATH ${opencv_contrib_modules_path})
|
||||||
|
|
||||||
|
set(CMAKE_INSTALL_PREFIX ${opencv_path}/build/install)
|
||||||
|
set(OpenCV_DIR ${opencv_path}/build/install)
|
||||||
|
|
||||||
|
# 编译opencv
|
||||||
|
message(STATUS "build opencv")
|
||||||
|
message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(opencv
|
||||||
|
PREFIX ${opencv_path}/build
|
||||||
|
SOURCE_DIR ${opencv_path}
|
||||||
|
CMAKE_ARGS
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
|
||||||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
-DBUILD_IPP_IW=${BUILD_IPP_IW}
|
||||||
|
-DBUILD_ITT=${BUILD_ITT}
|
||||||
|
-DBUILD_JAVA=${BUILD_JAVA}
|
||||||
|
-DBUILD_PERF_TESTS=${BUILD_PERF_TESTS}
|
||||||
|
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_TBB=${BUILD_TBB}
|
||||||
|
-DBUILD_TESTS=${BUILD_TESTS}
|
||||||
|
-DBUILD_PYTHON=${BUILD_PYTHON}
|
||||||
|
-DBUILD_EXAMPLES=${BUILD_EXAMPLES}
|
||||||
|
-DBUILD_opencv_apps=${BUILD_opencv_apps}
|
||||||
|
-DBUILD_opencv_aruco=${BUILD_opencv_aruco}
|
||||||
|
-DBUILD_opencv_bgsegm=${BUILD_opencv_bgsegm}
|
||||||
|
-DBUILD_opencv_bioinspired=${BUILD_opencv_bioinspired}
|
||||||
|
-DBUILD_opencv_calib3d=${BUILD_opencv_calib3d}
|
||||||
|
-DBUILD_opencv_ccalib=${BUILD_opencv_ccalib}
|
||||||
|
-DBUILD_opencv_core=${BUILD_opencv_core}
|
||||||
|
-DBUILD_opencv_datasets=${BUILD_opencv_datasets}
|
||||||
|
-DBUILD_opencv_dnn=${BUILD_opencv_dnn}
|
||||||
|
-DBUILD_opencv_dnn_objdetect=${BUILD_opencv_dnn_objdetect}
|
||||||
|
-DBUILD_opencv_dnn_superres=${BUILD_opencv_dnn_superres}
|
||||||
|
-DBUILD_opencv_dpm=${BUILD_opencv_dpm}
|
||||||
|
-DBUILD_opencv_face=${BUILD_opencv_face}
|
||||||
|
-DBUILD_opencv_features2d=${BUILD_opencv_features2d}
|
||||||
|
-DBUILD_opencv_flann=${BUILD_opencv_flann}
|
||||||
|
-DBUILD_opencv_fuzzy=${BUILD_opencv_fuzzy}
|
||||||
|
-DBUILD_opencv_gapi=${BUILD_opencv_gapi}
|
||||||
|
-DBUILD_opencv_hfs=${BUILD_opencv_hfs}
|
||||||
|
-DBUILD_opencv_highgui=${BUILD_opencv_highgui}
|
||||||
|
-DBUILD_opencv_img_hash=${BUILD_opencv_img_hash}
|
||||||
|
-DBUILD_opencv_imgcodecs=${BUILD_opencv_imgcodecs}
|
||||||
|
-DBUILD_opencv_imgproc=${BUILD_opencv_imgproc}
|
||||||
|
-DBUILD_opencv_intensity_transform=${BUILD_opencv_intensity_transform}
|
||||||
|
-DBUILD_opencv_java_bindings_generator=${BUILD_opencv_java_bindings_generator}
|
||||||
|
-DBUILD_opencv_js=${BUILD_opencv_js}
|
||||||
|
-DBUILD_opencv_js_bindings_generator=${BUILD_opencv_js_bindings_generator}
|
||||||
|
-DBUILD_opencv_line_descriptor=${BUILD_opencv_line_descriptor}
|
||||||
|
-DBUILD_opencv_mcc=${BUILD_opencv_mcc}
|
||||||
|
-DBUILD_opencv_ml=${BUILD_opencv_ml}
|
||||||
|
-DBUILD_opencv_objc_bindings_generator=${BUILD_opencv_objc_bindings_generator}
|
||||||
|
-DBUILD_opencv_objdetect=${BUILD_opencv_objdetect}
|
||||||
|
-DBUILD_opencv_optflow=${BUILD_opencv_optflow}
|
||||||
|
-DBUILD_opencv_phase_unwrapping=${BUILD_opencv_phase_unwrapping}
|
||||||
|
-DBUILD_opencv_photo=${BUILD_opencv_photo}
|
||||||
|
-DBUILD_opencv_plot=${BUILD_opencv_plot}
|
||||||
|
-DBUILD_opencv_python_bindings_generator=${BUILD_opencv_python_bindings_generator}
|
||||||
|
-DBUILD_opencv_python_tests=${BUILD_opencv_python_tests}
|
||||||
|
-DBUILD_opencv_quality=${BUILD_opencv_quality}
|
||||||
|
-DBUILD_opencv_rapid=${BUILD_opencv_rapid}
|
||||||
|
-DBUILD_opencv_reg=${BUILD_opencv_reg}
|
||||||
|
-DBUILD_opencv_rgbd=${BUILD_opencv_rgbd}
|
||||||
|
-DBUILD_opencv_saliency=${BUILD_opencv_saliency}
|
||||||
|
-DBUILD_opencv_shape=${BUILD_opencv_shape}
|
||||||
|
-DBUILD_opencv_stereo=${BUILD_opencv_stereo}
|
||||||
|
-DBUILD_opencv_stitching=${BUILD_opencv_stitching}
|
||||||
|
-DBUILD_opencv_structured_light=${BUILD_opencv_structured_light}
|
||||||
|
-DBUILD_opencv_superres=${BUILD_opencv_superres}
|
||||||
|
-DBUILD_opencv_surface_matching=${BUILD_opencv_surface_matching}
|
||||||
|
-DBUILD_opencv_text=${BUILD_opencv_text}
|
||||||
|
-DBUILD_opencv_tracking=${BUILD_opencv_tracking}
|
||||||
|
-DBUILD_opencv_ts=${BUILD_opencv_ts}
|
||||||
|
-DBUILD_opencv_video=${BUILD_opencv_video}
|
||||||
|
-DBUILD_opencv_videoio=${BUILD_opencv_videoio}
|
||||||
|
-DBUILD_opencv_videostab=${BUILD_opencv_videostab}
|
||||||
|
-DBUILD_opencv_wechat_qrcode=${BUILD_opencv_wechat_qrcode}
|
||||||
|
-DBUILD_opencv_world=${BUILD_opencv_world}
|
||||||
|
-DBUILD_opencv_xfeatures2d=${BUILD_opencv_xfeatures2d}
|
||||||
|
-DBUILD_opencv_ximgproc=${BUILD_opencv_ximgproc}
|
||||||
|
-DBUILD_opencv_xobjdetect=${BUILD_opencv_xobjdetect}
|
||||||
|
-DBUILD_opencv_xphoto=${BUILD_opencv_xphoto}
|
||||||
|
-DOPENCV_ENABLE_NONFREE=${OPENCV_ENABLE_NONFREE}
|
||||||
|
-DOPENCV_EXTRA_MODULES_PATH=${OPENCV_EXTRA_MODULES_PATH}
|
||||||
|
BUILD_ALWAYS 1
|
||||||
|
INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT EXISTS ${CMAKE_INSTALL_PREFIX}/lib)
|
||||||
|
message(STATUS "opencv build faild")
|
||||||
|
endif()
|
||||||
|
message(STATUS "build opencv done")
|
||||||
|
endfunction(build_opencv_and_contrib)
|
||||||
|
|
||||||
|
macro(auto_find_opencv is_static)
|
||||||
|
auto_download_opencv_contrib(opencv_contrib_path module_path)
|
||||||
|
message(STATUS "opencv_contrib_path: ${opencv_contrib_path}")
|
||||||
|
message(STATUS "module_path: ${module_path}")
|
||||||
|
auto_download_opencv(opencv_path)
|
||||||
|
message(STATUS "opencv_path: ${opencv_path}")
|
||||||
|
build_opencv_and_contrib(${opencv_path} ${module_path})
|
||||||
|
set(OpenCV_DIR ${opencv_path}/build/install)
|
||||||
|
find_package(OpenCV REQUIRED)
|
||||||
|
endmacro(auto_find_opencv )
|
||||||
|
|
@ -1,3 +1,21 @@
|
||||||
|
|
||||||
add_executable(cmake_template main.cpp)
|
add_executable(cmake_template main.cpp)
|
||||||
|
|
||||||
|
include_directories(${OPENCV_INCLUDE_DIRS})
|
||||||
|
message(STATUS "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
|
||||||
|
target_link_libraries(cmake_template ${OpenCV_LIBS})
|
||||||
|
message(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")
|
||||||
|
add_custom_command(TARGET cmake_template POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
$<TARGET_FILE:opencv_core>
|
||||||
|
$<TARGET_FILE:opencv_features2d>
|
||||||
|
$<TARGET_FILE:opencv_flann>
|
||||||
|
$<TARGET_FILE:opencv_imgcodecs>
|
||||||
|
$<TARGET_FILE:opencv_imgproc>
|
||||||
|
$<TARGET_FILE:opencv_plot>
|
||||||
|
$<TARGET_FILE:opencv_tracking>
|
||||||
|
$<TARGET_FILE:opencv_video>
|
||||||
|
$<TARGET_FILE:opencv_videoio>
|
||||||
|
$<TARGET_FILE:opencv_xfeatures2d>
|
||||||
|
|
||||||
|
$<TARGET_FILE_DIR:cmake_template>)
|
||||||
|
|
|
||||||
|
|
@ -1,65 +1,9 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <opencv2/opencv.hpp>
|
||||||
auto to_hex = [](unsigned char c) -> char
|
|
||||||
{
|
|
||||||
if (c < 10)
|
|
||||||
{
|
|
||||||
return c + 48;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return c + 55;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
unsigned char mac[6] = {0xa0, 0xa0, 0xb0, 0x03, 0xa0, 0xd0};
|
cv::Mat image = cv::Mat(100, 100, CV_8UC3, cv::Scalar(0, 0, 0));
|
||||||
unsigned short sum = 0;
|
std::cout << "Image size: " << image.size() << std::endl;
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
sum += mac[i];
|
|
||||||
}
|
|
||||||
// print sum
|
|
||||||
std::cout << "Sum: " << sum << std::endl;
|
|
||||||
// to string
|
|
||||||
std::string macString = "";
|
|
||||||
// loop through all bytes
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
// to HEX
|
|
||||||
macString += to_hex(mac[i] / 16);
|
|
||||||
macString += to_hex(mac[i] % 16);
|
|
||||||
|
|
||||||
// add colon
|
|
||||||
macString += ":";
|
|
||||||
}
|
|
||||||
// remove last colon
|
|
||||||
macString.pop_back();
|
|
||||||
// print mac address
|
|
||||||
std::cout << "MAC: " << macString << std::endl;
|
|
||||||
|
|
||||||
auto sum_to_hex = [](unsigned short s) -> std::string
|
|
||||||
{
|
|
||||||
std::string hex = "";
|
|
||||||
// loop through all bytes
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
// to HEX
|
|
||||||
unsigned char c = s % 256;
|
|
||||||
hex += to_hex(c % 16);
|
|
||||||
hex += to_hex(c / 16);
|
|
||||||
// shift right
|
|
||||||
s /= 256;
|
|
||||||
}
|
|
||||||
// reverse string
|
|
||||||
std::reverse(hex.begin(), hex.end());
|
|
||||||
// return hex
|
|
||||||
return hex;
|
|
||||||
};
|
|
||||||
|
|
||||||
// print sum as hex
|
|
||||||
std::cout << "Sum as HEX: " << sum_to_hex(sum) << std::endl;
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue