关于Manjaro,使用这个系统除了符合本工科男的审美外,更重要的是资源占用真的很少,所以才折腾安装这个,先上一张桌面。
安装Manjaro的教程比较多,这里就不多阐述了,传送们走起
Manjaro安装传送门
感谢ArcueidCroft
参照官方提供的安装说明,我们只需要把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安装官方说明
如果看不懂英文可以用谷歌浏览器翻译下,如图
依赖库说明(网上查资料+自己理解)
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样例的可执行文件完成了。
接下来重头戏
初次接触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下交叉编译。