1、去github下载opencv4.4.0源码注意下载release版本的
2、去github下载opencv_contrib4.4.0源码注意下载release版本的
3、电脑安装必须的软件(cmake、mingw)具体可参考另一篇博客地址
1、打开cmake_gui软件,linux与windows上都有这个工具
2、第一行输入源码路径,第二行输入编译及生成的路径(自己建立个文件夹即可)
配置Qt_DIR
路径信息:C:\Qt\Qt5.13.2\5.13.2\mingw73_64\lib\cmake\Qt5
这个根据个人安装路径不同进行修改,同时跟选择的编译器要一致
取消勾选WITH_IPP
、WITH_MSMF
ENABLE_PRECOMPILED_HEADERS
BUILD_SHARED_LIBS
取消勾选(不要共享库即动态库)即可编译成静态库CONFIG += static
指定静态编译即可,这是唯一与链接动态库不同的地方-static
同样指定静态编译即可,否则优先寻找动态库编译链接glGenBuffers’ was not declared in this scope
问题解决参考地址
FFMPEG配置未成功启用问题
make
make install
最后将opencv的install目录下的动态库文件所在路径加入系统环境变量
还是不清楚的情况,可以搜索一下库文件名字定位到那里。
使用QT建立一个窗口工程
#动态库
INCLUDEPATH += H:\My_Workspace\C_File\GitHub\opencv\build\install\include\opencv2 \
H:\My_Workspace\C_File\GitHub\opencv\build\install\include
LIBS += H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_calib3d440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_core440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_dnn440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_features2d440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_flann440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_gapi440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_highgui440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_imgcodecs440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_imgproc440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_ml440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_objdetect440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_photo440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_stitching440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_video440.dll.a \
H:\My_Workspace\C_File\GitHub\opencv\build\install\x64\mingw\lib\libopencv_videoio440.dll.a
#include "mainwindow.h"
#include
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
using namespace cv;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
Mat img = imread("C://Users//47282//Desktop//281118.jpg" ,IMREAD_GRAYSCALE);
namedWindow("111");
imshow("111", img);
return a.exec();
}
注意:如果没有添加环境变量 ,则会出现编译通过,但是无法运行问题(异常结束问题)
使用QTcreator打开CMakelist文件,打开效果类似于打开.pro文件
选择编译工具链
带FPU的编译器优化问题,可以看到文件中的说明
修改文件,位于源码目录下3rdparty/libpng/pngpriv.h
# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
//改为:
# if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
sudo make install
sudo ./qtcreator
#输入root用户密码即可
linux中的编译后安装目录里pkgconfig目录.pc文件路径加入PKG_CONFIG_PATH
环境变量中便于系统编译时查找使用
将以下加入到/etc/bash.bashrc中
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:.pc文件的路径信息加到此处
验证
pkg-config --cflags --libs opencv
参考地址
x264编译
#下载x264
wget -c http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191217-2245.tar.bz2
#解压后,进入源码目录配置编译
./configure --enable-static --enable-shared --disable-asm
make
sudo make install
#更新源
sudo apt update
sudo apt install ffmpeg --fix-missing
源码编译,脚本
#!/bin/sh
#下载
wget -c https://github.com/FFmpeg/FFmpeg/archive/n4.3.1.zip
#解压后,进入源码目录配置编译
unzip FFmpeg-n4.3.1.zip
cd FFmpeg-n4.3.1
./configure \
--target-os=linux \
--enable-shared \
--enable-static \
--enable-pic \
--enable-gpl \
--enable-nonfree \
--enable-ffmpeg \
--disable-ffplay \
--enable-swscale \
--enable-avresample \
--enable-pthreads \
--disable-armv5te \
--disable-armv6 \
--disable-armv6t2 \
--disable-yasm \
--disable-stripping \
--enable-libx264
make clean
make -j4 && sudo make install
#下载x264
wget -c http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191217-2245.tar.bz2
#解压后,进入源码目录配置交叉编译
./configure --enable-static --enable-shared --host=arm-linux-gnueabihf --cross-prefix=arm-linux-gnueabihf- --enable-pic --disable-asm --prefix=/opt/x264_INSTALL_7_2HF
#编译
make
#安装
sudo make install
若编译出现如下错误,取消--disable-asm
如果在sudo make install
出现找不到命令情形,可能编译器的路径没有放置在/etc/bash.bashrc中,尝试使用su 输入密码后再次make install进行安装
#下载
wget -c https://github.com/FFmpeg/FFmpeg/archive/n4.3.1.zip
#解压后,进入源码目录配置交叉编译
将一下脚本复制,修改其中的编译工具链,添加可执行权限后复制到ffmpeg的源码目录执行即可,注意arch项的配置要配合编译器
#!/bin/sh
BASE=/opt/FFMPEG_INSTALL_7_2HF
BUILD_HOST=arm-linux-gnueabihf
OUTPUT_PATH=${BASE}
OTHER_LIB=/opt/x264_INSTALL_7_2HF
./configure \
--cross-prefix=${BUILD_HOST}- \
--enable-cross-compile \
--target-os=linux \
--cc=${BUILD_HOST}-gcc \
--arch=arm \
--prefix=${OUTPUT_PATH}/ffmpeg \
--enable-shared \
--enable-static \
--enable-pic \
--enable-gpl \
--enable-nonfree \
--enable-ffmpeg \
--disable-ffplay \
--enable-swscale \
--enable-avresample \
--enable-pthreads \
--disable-armv5te \
--disable-armv6 \
--disable-armv6t2 \
--disable-x86asm \
--disable-stripping \
--enable-libx264 \
--extra-cflags=-I${OTHER_LIB}/include \
--extra-ldflags=-L${OTHER_LIB}/lib
#--disable-neon 依据平台是否添加此项
make clean
make -j4 && sudo make install
可能的问题:无法找到ffmpeg的库文件,也就是配置列表ffmpeg无法编译进去
解决:粗暴的方式(1、找到detect_ffmpeg.cmake
增加如下段落 2、再将库文件复制到ffmpeg目录 3、重新编译安装)其中第二步应该可以不做,我没有测试
cmake增加的段落如下:
#这里只是为了set HAVE_FFMPEG 为 ON 配置打印信息骗骗人
if(NOT HAVE_FFMPEG AND NOT WIN32 AND NOT OPENCV_FFMPEG_SKIP_DOWNLOAD)
message(STATUS "===============Required DOWNLOAD==============")
include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg.cmake")
download_win_ffmpeg(FFMPEG_CMAKE_SCRIPT)
if(FFMPEG_CMAKE_SCRIPT)
include("${FFMPEG_CMAKE_SCRIPT}")
set(FFMPEG_libavcodec_VERSION "58.91.100" PARENT_SCOPE) # info
set(FFMPEG_libavformat_VERSION "58.45.100" PARENT_SCOPE) # info
set(FFMPEG_libavutil_VERSION "56.51.100" PARENT_SCOPE) # info
set(FFMPEG_libswscale_VERSION "5.7.100" PARENT_SCOPE) # info
set(FFMPEG_libavresample_VERSION "4.0.0" PARENT_SCOPE) # info
set(HAVE_FFMPEG TRUE)
set(HAVE_FFMPEG_WRAPPER TRUE)
endif()
endif()
#以下个人调试用,输出HAVE_FFMPEG 等等变量的状态,可以删除
if(NOT HAVE_FFMPEG)
message(STATUS "===============NOT HAVE_FFMPEG==============")
endif()
if(NOT HAVE_FFMPEG_WRAPPER)
message(STATUS "===============NOT HAVE_FFMPEG_WRAPPER==============")
endif()
if(NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK)
message(STATUS "===============NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK==============")
endif()
if(NOT OPENCV_FFMPEG_USE_FIND_PACKAGE)
message(STATUS "===============NOT OPENCV_FFMPEG_USE_FIND_PACKAGE==============")
endif()
if(FFMPEG_CMAKE_SCRIPT)
message(STATUS "==============="${FFMPEG_CMAKE_SCRIPT}"==============")
endif()
#实际作用:测试编译,若无法通过说明库文件放置错误,或者编译错误
if(HAVE_FFMPEG AND HAVE_FFMPEG_WRAPPER AND NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK)
message(STATUS "===============try_compile==============")
set(FFMPEG_INCLUDE_DIRS "/usr/local/include")#这里根据自己的安装目录修改
set(FFMPEG_LIBRARIES "-lavcodec -lavformat -lswscale -lavdevice -lavfilter -lavresample -lavutil -lpostproc -lswresample -lx264")#这里根据自己的安装目录修改
set(HAVE_FFMPEG_WRAPPER FALSE)
message(STATUS "FFMPEG_INCLUDE_DIRS->:${FFMPEG_INCLUDE_DIRS}")
message(STATUS "FFMPEG_LIBRARIES->:${FFMPEG_LIBRARIES}")
try_compile(__VALID_FFMPEG
"${OpenCV_BINARY_DIR}"
"${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp"
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_DIRS}"
"-DLINK_LIBRARIES:STRING=${FFMPEG_LIBRARIES}"
OUTPUT_VARIABLE TRY_OUT
)
if(NOT __VALID_FFMPEG)
# message(FATAL_ERROR "FFMPEG: test check build log:\n${TRY_OUT}")
message(STATUS "WARNING: Can't build ffmpeg test code")
set(HAVE_FFMPEG FALSE)
endif()
endif()
#修改添加编译链接项,这个比较重要,上面只是判断库对不对,这个是加入编译了
if(HAVE_FFMPEG_WRAPPER)
ocv_add_external_target(ffmpeg "" "" "HAVE_FFMPEG_WRAPPER")
elseif(HAVE_FFMPEG)
message(STATUS "OK: Can build LIB With ffmpeg code link:${FFMPEG_INCLUDE_DIRS}+${FFMPEG_LIBRARIES}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FFMPEG_INCLUDE_DIRS} ${FFMPEG_LIBRARIES}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FFMPEG_INCLUDE_DIRS} ${FFMPEG_LIBRARIES}")
ocv_add_external_target(ffmpeg "${FFMPEG_INCLUDE_DIRS}" "${FFMPEG_LIBRARIES}" "HAVE_FFMPEG")
endif()
set(HAVE_FFMPEG ${HAVE_FFMPEG} PARENT_SCOPE)
配置输出没有出现以下测试编译错误,则说明库正确。
交叉编译的版本则指定连接路径即可
set(FFMPEG_LIBRARIES "-lavcodec -lavformat -lswscale -lavdevice -lavfilter -lavresample -lavutil -lpostproc -lswresample -lx264 -L/opt/FFMPEG_INSTALL_7_2HF/ffmpeg/lib -L/opt/x264_INSTALL_7_2HF/lib")
此问题参考
参考2
错误:gcc: error: long: No such file or directory
C:\msys64\mingw64\bin\windres.exe: preprocessing failed.
make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1475: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
make[1]: *** [CMakeFiles\Makefile2:1379: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make: *** [Makefile:162: all] Error 2
解决:在cmake的UI界面中搜索:OPENCV_ENABLE_ALLOCATOR_STATS
取消勾即可解决错误!
命令行下处理:cmake -DOPENCV_ENABLE_ALLOCATOR_STATS=OFF
错误:error: boostdesc_bgm.i: No such file or directory
解决方式1:搜索文件CMakeDownloadLog.txt
在此文件中搜索boostdesc_bgm.i
找到它的下载地址,手动下载,再复制到缺失的文件夹中
解决方式2:当然可能由于某一时刻网络的问题导致未能下载成功,也可以再次点击配置,让他再次下载
参考博客地址