Linux源码编译安装OpenCV4(Ubuntu19)

linux安装官网参考
从源码编译jar官网参考

1.1 安装lib依赖

必须要安装的依赖,通过命令安装:

[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

如果需要其他的功能,可选安装:

[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

1.2 安装ant依赖

注:此前因没安装ant,导致构建静态jni库时总是不生成,make也不报错,必须安装!
Apache ant官方下载最新版 https://ant.apache.org/bindownload.cgi

2.1 安装OpenCV(这里使用4.1.1)

下载Opencv安装包,OpenCV官网下载 只有Windows和Android等
若想构建Centos版只能从源码构建 Github源码下载

解压:

unzip opencv-4.1.1.zip

2.2 在解压的主目录里新建build空目录用来存放编译文件(因OpenCV4.x要求不允许生成在有源码的目录):

cd opencv-4.1.1
mkdir build
cd build

【注: cmake/make编译的路径不要包含中文,否则可能导致一些奇葩问题,亲身踩坑!】
报错:

...
[ 43%] Linking CXX static library ../lib/liblibprotobuf.a
[ 43%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/matrix_c.cpp.o
[ 43%] Building  target libprotobuf xxx   CMakefile (:163  all) 

2.3.1 然后在新建的这个文件里运行cmake(为了减少升级cmake2到cmake3源码安装的折腾,直接可在线安装 yum install -y cmake3):

cmake3 -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DBUILD_opencv_java=ON -DCMAKE_INSTALL_PREFIX=/usr/local ..

2.3.2 更多可选参数,如:

-DCMAKE_BUILD_TYPE=RELEASE
-DWITH_OPENCL=OFF
-DWITH_CUDA=OFF
-DWITH_OPENCL=ON
-DWITH_OPENGL=OFF
-DWITH_OPENMP=OFF
-DWITH_OPENNNI=OFF
-DWITH_OPENNNI2=OFF
-DWITH_OPENVX=OFF
-DWITH_VULKAN=OFF
-DBUILD_CUDA_STUBS=OFF
-DBUILD_DOCS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_IPP_IW=ON
-DBUILD_ITT=ON
-DBUILD_JASPER=ON
-DBUILD_JAVA=OFF
-DBUILD_JPEG=ON
-DBUILD_OPENEXR=ON
-DBUILD_PACKAGE=ON
-DBUILD_PERF_TESTS=OFF
-DBUILD_PNG=ON
-DBUILD_PROTOBUF=ON
-DBUILD_SHARED_LIBS=ON
-DBUILD_TBB=OFF
-DBUILD_TESTS=ON
-DBUILD_TIFF=ON
-DBUILD_USE_SYMLINKS=OFF
-DBUILD_WEBP=ON
-DBUILD_WITH_DEBUG_INFO=OFF
-DBUILD_WITH_DYNAMIC_IPP=OFF
-DBUILD_ZLIB=ON
-DBUILD_opencv_apps=OFF
-DBUILD_opencv_calib3d=OFF
-DBUILD_opencv_core=ON
-DBUILD_opencv_dnn=ON
-DBUILD_opencv_features2d=OFF
-DBUILD_opencv_flann=OFF
-DBUILD_opencv_gapi=ON
-DBUILD_opencv_highgui=OFF
-DBUILD_opencv_imgcodecs=ON
-DBUILD_opencv_imgproc=ON
-DBUILD_opencv_java_bindings_generator=OFF
-DBUILD_opencv_js=OFF
-DBUILD_opencv_ml=OFF
-DBUILD_opencv_objdetect=OFF
-DBUILD_opencv_photo=OFF
-DBUILD_opencv_python2=OFF
-DBUILD_opencv_python3=OFF
-DBUILD_opencv_python_bindings_generator=OFF
-DBUILD_opencv_stitching=OFF
-DBUILD_opencv_ts=OFF
-DBUILD_opencv_video=OFF
-DBUILD_opencv_videoio=OFF
-DBUILD_opencv_world=OFF
-DCMAKE_INSTALL_PREFIX=./install

如上参数表示,只关注core、dnn、imgcodecs、imgproc、gapi模块。
若需要编译扩展模块,则还需要加入:

-DOPENCV_EXTRA_MODULES_PATH=/path/opencv_contrib/modules

如果是嵌入式设备,还需要加入相应的编译工具链和其他一些配置,如下所示:

-DCMAKE_C_COMPILER=/path/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc -DCMAKE_CXX_COMPILER=/path/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_C_FLAGS=-fPIC -DCMAKE_EXE_LINKER_FLAGS=-lpthread -lrt -ldl

2.4 OpenCV4默认不生成.pc文件,OPENCV_GENERATE_PKGCONFIG=ON才会生成。
之后就是编译和安装了,我的电脑是四核八线程,可以运行make,若不想编译时时间太长影响工作,四核的PC可用 make -j7。

make -j7
sudo make install

FQA:

问题1:使用clion或者CMake命令时报错,错误消息:CMake Error at CMakeLists.txt:11 (message):FATAL: In-source builds are not allowed.You should create a separate directory for build files.

解决方案:
进到opencv主目录

rm CMakeCache.txt
mkdir build
cd build
cmake ..
make

问题2:编译成功后,如将 libopencv_xxx.jar和libopencv_xxx.so拷贝只Java工程运行,报错消息:

libopencv_core.so.xxx : cannot open shared object file libopencv_dnn.so.xxx: no such file or directory
解决方案:
检查编译参数是否使用静态编译,因为动态编译生成的so文件会使用编译的时候的系统绝对路径,要想在java工程动态引用,必须使用静态编译,显示指定参数:-DBUILD_SHARED_LIBS=OFF(默认是ON)

已在应用于本人一个开源项目:
参考1:https://github.com/wl4g/super-devops-tool-opencv-native
参考2:https://github.com/wl4g/super-devops/tree/master/super-devops-tool/super-devops-tool-opencv

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354