Manjaro下Opencv4+CMake安装和编译指南(完整版)

关于Manjaro,使用这个系统除了符合本工科男的审美外,更重要的是资源占用真的很少,所以才折腾安装这个,先上一张桌面。

  • 正文开始

安装Manjaro

安装Manjaro的教程比较多,这里就不多阐述了,传送们走起
Manjaro安装传送门
感谢ArcueidCroft

下面是安装opencv4

参照官方提供的安装说明,我们只需要把opencv和其依赖库就可以
manjaro下安装软件的指令是sudo pacman -S xxx。
安装opencv:sudo pacman -S opencv

~ >>> sudo pacman -S opencv                                                                                                  [1]
警告:opencv-4.4.0-1 已经为最新 -- 重新安装
正在解析依赖关系...
正在查找软件包冲突...

软件包 (1) opencv-4.4.0-1

全部安装大小:  101.35 MiB
净更新大小:    0.00 MiB

:: 进行安装吗? [Y/n] Y

安装官方说明
opencv安装官方说明
如果看不懂英文可以用谷歌浏览器翻译下,如图
Manjaro下Opencv4+CMake安装和编译指南(完整版)_第1张图片
依赖库说明(网上查资料+自己理解)
build-essential:主要用于建立C/C++的编译环境,由于Manjaro plasme已经自带gcc和g++,所以这步可以省略,而且在pacman下貌似没有这个依赖库。
cmake:编译生成可执行文件强大的工具,全平台可用,建议安装。
git:一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容,一个开放源码的版本控制软件。
libgtk2.0-dev:GTK +是用于创建图形用户界面的多平台工具包。GTK +提供了一整套的小部件,适用于从小型一次性工具到完整的应用程序套件的项目,个人理解就是图形界面需要依赖这个兄弟。
pkg-config:这个工具是你在编译应用程序和库时使用的辅助工具。它可以帮助您在命令行上插入正确的编译器选项,以便应用程序可以使用。个人理解就是,帮你找到编译程序依赖库的重要工具。
然后就是参照了这个博客,按照这个安装依赖库即可
Opencv依赖库安装说明

但只参照了依赖库部分,后面的指令cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …是我太菜了,在manjaro下好像并没有起作用,至今没找到原因在哪。

那么我的方法就是跳过这一步环境配置,用cmake-gui来完成配置工作

~ >>> cd /usr/share/opencv4/samples                                                                                        [130]
/usr/.../opencv4/samples >>> mkdir build                                                                                        
/usr/.../opencv4/samples >>> cd build                                                                                      [130]
/usr/.../samples/build >>> cmake-gui   


其中where is the source code是指定源码的目录**/usr/share/opencv4/samples**,where to build the binaries是指定编译生成可执行文件**/usr/share/opencv4/samples/build**,也就是build的目录 。
完成以上配置后,点击configure编译,完成后点击Generate完成编译。
补充一句:manjaro中的opencv*
源码位置:在/usr/share/opencv4中,具体如果不知道的话可以通过以下指令找到他sudo pacman -Ql opencv-samples。
头文件位置:在/usr/include/opencv4
依赖库:在/usr/lib64。

编译完成后

/usr/.../samples/build >>> cd /usr/share/opencv4/samples/build/cpp                                                         [130]
/usr/.../build/cpp >>> ls 
/usr/.../build/cpp >>> ls                                                                                                       
CMakeFiles                        example_cpp_falsecolor                   example_cpp_polar_transforms
cmake_install.cmake               example_cpp_fback                        example_cpp_qrcode
example_cpp_3calibration          example_cpp_ffilldemo                    example_cpp_segment_objects
example_cpp_application_trace     example_cpp_filestorage                  example_cpp_select3dobj
example_cpp_bgfg_segm             example_cpp_fitellipse                   example_cpp_simd_basic
example_cpp_calibration           example_cpp_grabcut                      example_cpp_smiledetect
example_cpp_camshiftdemo          example_cpp_image_alignment              example_cpp_squares
example_cpp_cloning_demo          example_cpp_imagelist_creator            example_cpp_stereo_calib
example_cpp_cloning_gui           example_cpp_imagelist_reader             example_cpp_stereo_match
example_cpp_connected_components  example_cpp_inpaint                      example_cpp_stitching
example_cpp_contours2             example_cpp_intelligent_scissors         example_cpp_stitching_detailed
example_cpp_convexhull            example_cpp_intersectExample             example_cpp_text_skewness_correction
example_cpp_cout_mat              example_cpp_kalman                       example_cpp_train_HOG
example_cpp_create_mask           example_cpp_kmeans                       example_cpp_train_svmsgd
example_cpp_dbt_face_detection    example_cpp_laplace                      example_cpp_travelsalesman
example_cpp_delaunay2             example_cpp_letter_recog                 example_cpp_tree_engine
example_cpp_demhist               example_cpp_lkdemo                       example_cpp_videocapture_basic
example_cpp_detect_blob           example_cpp_logistic_regression          example_cpp_videocapture_camera
example_cpp_detect_mser           example_cpp_mask_tmpl                    example_cpp_videocapture_gphoto2_autofocus
example_cpp_dft                   example_cpp_matchmethod_orb_akaze_brisk  example_cpp_videocapture_gstreamer_pipeline
example_cpp_digits                example_cpp_minarea                      example_cpp_videocapture_image_sequence
example_cpp_dis_opticalflow       example_cpp_morphology2                  example_cpp_videocapture_intelperc
example_cpp_distrans              example_cpp_neural_network               example_cpp_videocapture_openni
example_cpp_drawing               example_cpp_npr_demo                     example_cpp_videocapture_starter
example_cpp_edge                  example_cpp_opencv_version               example_cpp_videowriter_basic
example_cpp_ela                   example_cpp_pca                          example_cpp_warpPerspective_demo
example_cpp_em                    example_cpp_peopledetect                 example_cpp_watershed
example_cpp_facedetect            example_cpp_phase_corr                   Makefile
example_cpp_facial_features       example_cpp_points_classifier
/usr/.../build/cpp >>> ./example_cpp_ela 

随便挑一个样例运行一下看。

好了,证明opencv样例的可执行文件完成了。

接下来重头戏

用cmake运行自己编写的程序

初次接触linux真的走了好久的弯路,用cmake在manjaro上跑opencv4的程序踩过了无数的坑。
首先我们要明白一点,cmake的一些工作原理。用cmake编译程序时,需要在CMakeLists.txt里制定编译器、头文件的路径、源文件的路径、依赖库等信息。开始配置的时候,我在/home/用户名/Documents/opencv_test/建立了自己的opencv_test.cpp文件,编写了打开一张图片的程序,如下:

#include
#include"opencv2/opencv.hpp"

using namespace std;
using namespace cv;
int main(void)
{
     
	Mat image;
	image=imread("这里写你的图片路径");//打开一张图片
	namedWindow("Show Image",0);//定义窗口名称
	imshow("Show Image",image);//显示一张图片
	waitKey(0);
}

按照以下cmake的教程编写CMakeList.txt文件
CMakeLists.txt详细说明
编写如下:

cmake_minimum_required(VERSION 2.8)
project(opencv_test)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
option(	OPENCV_GENERATE_PKGCONFIG ON)
include_directories("/usr/include/opencv4/") 
aux_source_directory(.DIR_SRCS)
add_executable(opencv_text ${DIR_SRCS})

cmake . 满屏错误。。。
后来查了opencv官网的安装说明
opencv gcc cmake配置教程
看到了opencv官方给的CMakeLists.txt配置文件说明

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

然后在里面加入自己的依赖库和源目录
如下,可以通过vim CMakeLists.txt对文件进行编辑

# cmake needs this line
cmake_minimum_required(VERSION 2.8)

# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

# Define project name
project(opencv_test)

# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)  
include_directories( ${OpenCV_INCLUDE_DIRS} )
# Declare the executable target built from your sources
add_executable(opencv_test2 hello.cpp Myprintf.cpp)

# Link your application with OpenCV libraries
target_link_libraries(opencv_test2 ${OpenCV_LIBS})

然后

cmake .
make

再执行./opencv_test,运行成功!


先用着,后面研究下怎么在VS code下交叉编译。

你可能感兴趣的:(Manjaro软件配置安装,manjaro,opencv,cmake,linux,c++)