想用QT作为OpenCV的GUI界面,有界面更正式些,但是之前看了几篇博文操作零零碎碎的,这次准备记录下来,靠一段落。记录不是很完整,以后在补充。
笔记目录
- Pull Requesst 具体步骤
- 准备工作
- 使用CMake配置并生成项目文件,其中多次迭代configure
- 为OpenCV配置QT
- Compile opencv in Release mode
- Compile opencv in Debug mode
- 通过VS2015图形界面编译
- 编译后可以删除的文件,我发现build/modules是VS2015编译后变大的,所以感觉应该是编译的中间文件,所以应该可以删除,反正每次都要重新生成,其他目录的功能我也没搞清楚,以后再说吧。
- 配置系统变量
- Testing C++ code with CLion
- 利用CLion+命令行的形式
- 只利用CLion编译运行
- Testing Python code with CLion
- Testing C++ code with VS2015
- How to build applications with OpenCV inside the "Microsoft Visual Studio"
- VS2015工程配置
- 测试OpenCV的QT安装效果
OpenCV本身能生成的GUI界面极为简陋,故一般使用MFC或Qt等框架来搭建GUI界面,并将OpenCV嵌入进去,参考【2】。
Pull Requesst 具体步骤
- fork 主库到你自己的仓库,比如我得到了 https://github.com/doitbull/opencv
- clone 自己的仓库 git clone https://github.com/doitbull/opencv.git 到本地,使用git clone的方式,直接下载zip文件可能丢失git,由于git clone速度较慢,可以考虑添加proxy,添加方法如下,参考【38】
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
- 在本地添加主仓库为 upstream:git remote add upstream https://github.com/opencv/opencv.git / git fetch upstream // 保持fork仓库和原始仓库的代码同步,或者使用下面的操作步骤,区别我暂时没搞清楚,不过我使用的上面的步骤,无效再用下面的步骤吧,下面的步骤参考【39】:
- git checkout master
- git remote add --track master upstream https://github.com/opencv/opencv.git
- git pull upstream master
- git checkout 2.4
- git pull upstream 2.4
- git checkout upstream/master # checkout master 首先切换到upstream/master
- create a new branch for every single update you want to do,git checkout -b doitbull-new-branch # your-new-branch 是一个有意义的分支名,表示你这次要做的事情,如 add-mi5-config
- 编辑/添加代码文件 your-modified-files ,参考 Coding_Style_Guide
- Run testsuite locally: 运行本地测试集,确保代码本地运行没有问题后再提交
- get the required sample data by cloning https://github.com/opencv/opencv_extra (choose corresponding branch)
- export OPENCV_TEST_DATA_PATH=<path_to_opencv_extra>/testdata
- execute each test binary from the build directory, e.g. bin/opencv_test_core
- 不太清楚这个本地测试如何进行,应该有官方文档,不要自己瞎折腾
- git add your-modified-files / git commit -m '做的事情' / git push origin doitbull-new-branch
- create a pull request from your branch to the base branch,登录 https://github.com/opencv/opencv/compare/master...doitbull:master, 从自己仓库的 doitbull-new-branch 分支向主库的 master 分支发 PR
- 中间遇到 PR 有问题需要改的,请重复本小节的 git add your-modified-files 操作,git push origin doitbull-new-branch 之后,原来的 PR 会自动更新,不用重复提交 PR
- pull request要求参考Making a good pull request,先经过本地测试
- 经过在线测试和评估,Testing and merging pull requests
- 需要另外多个人 Review 并 Approve
- 攒够除自己外两个 AP 之后发 PR 的人主动合并(没权限合并找有权限的人合并)
- 合并的时候用 Squash and merge,Squash and merge是什么?
- dev测试通过后就会合并到master里面了
- tag,不过作为学习使用的话,可以直接编译mater分支代码,OPENCV_PATH设置为E:\OpenCV\opencv_source\opencv
先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了。
但是这时候 git 可能会提示你当前处于一个“detached HEAD" 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支:
git checkout -b branch_name tag_name
这样会从 tag 创建一个分支,然后就和普通的 git 操作一样了。
D:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
准备工作,官方文档【31】对编译原理解释的很清楚
- VS2015,VS2015是可以方便安装VS插件的最高版本,VS2017好多不能安装,所以选择VS2015是明智的;VS2015里最重要的主要是编译器MSVS 64位,用来编译出二级制文件;选择什么编译器,依赖于你调用OpenCV的应用程序所使用的编译器;
- CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile(配置生成相关的文件)或者输出project文件(针对特定IDE而言的),参考【36】。下载cmake的64位最新zip版本,参考【29】,解压到自己文件夹,然后添加E:\OpenCV\tool\cmake-3.10.1-win64-x64\bin路径到系统变量即可,使用最新的cmake也可以确保cmake支持最新的VS;
- OpenCV源代码OpenCV3.3.0 - OpenCV目前的最高版本;使用fork后的master分支,master分支显式为最新的tag3.4.0,使用master分支可以保持代码为最新状态,满足下心理;
- opencv_contrib源代码也是用fork后的master base branch;
既然我们在 master 主分支上编译,那么我们也把 build 文件夹建立在外面,这样就保证了源码目录的纯净;其中 build 文件夹本 质上 VS2105 解决方案的主目录,通过 cmake 配置了解决方案的各种依赖关系,而最后生成 build 和安装 intall 的文件都保存在这个目录下面,我用的目录名是 open cv_build ,主要是为了和源码目录 opencv_source 保持一致。
- QT5.9.2 - QT5的最高版本;
- Python还使用的之前安装过的Anaconda2,安装了py36虚拟环境,并在py36虚拟环境下安装了必要的依赖库;python模块主要是生成OpenCV的python接口(依赖Numpy科学计算包);
使用CMake配置Configure并创建Generate项目文件,其中多次迭代Configure确保配置一致,最后Generate出OpenCV solution
- 首次运行configure(specify the compiler (and IDE) you want to use),会根据各个模块的CMake文件下载预设的库文件,这些库文件存放在opencv_3rdparty的各个分支中 https://github.com/opencv/opencv_3rdparty/branches/all, 通过CMake文件就可以动态地链接到最新的第3方库文件,从而实现OpenCV和第3方库文件的分离,保证了OpenCV部分代码的纯净性
- 若configure后无法自动下载第3方库文件,手动下载第3方库文件,下载的文件被存储在隐藏文件夹.cache下
message(STATUS "FFMPEG: Package successfully downloaded")
include(${CMAKE_CURRENT_LIST_DIR}/ffmpeg_version.cmake)
- 自动下载第3方库文件
- 完成后,再次configure
- Check “INSTALL_C_EXAMPLES” and “INSTALL_PYTHON_EXAMPLES”
- OPENCV_EXTRA_MODULES_PATH 设置为 E:/OpenCV/opencv_source/opencv_contrib/modules
- ENABLE_CXX11,支持C++11特性
- BUILD_opencv_js,无效,支持3.1.0,暂时还是不勾选了吧,实在要调用可以考虑通过python做桥梁,没必要js搞一套我觉得
- BUILD_EXAMPLE【31】,如果是后来勾选的,感觉只要直接生产解决方案和生成INSTALL,不要选择重新生成,应该会自动跳过已经生成过的项目吧?
- BUILD_TESTS
- BUILD_PERF_TESTS
- WITH_QT,其他二次configure配置见下面的 为OpenCV配置QT 小节,选择了WITH_QT后,highgui本身的窗口界面会变成基于Qt的,比原来要好看一些,而且自动集成了一些图片缩放、保存等功能,参考【2】,WITH_X是用来配置packages开关的
- WITH_OPENGL,不知道有什么用,勾上吧
- 搜索python,把能配置的都配置上,configure后要再次搜索python配置,参考【34】
-
- 对于python记得把OPENCV_FORCE_PYTHON_LIBS勾选,否则无法生成cv2.pyd文件,cv2.pyd应该被复制到python安装目录Lib\site-packages下,可能要将cv2.cp36-win_amd64.pyd改名为cv2.pyd
- BUILD_SHARED_LIBS 生成的动态库其实可以理解为就是编译生成的exe了,当然了,有Release和Debug两种模式
- CMAKE_INSTALL_PREFIX 就相当于软件的安装路径了
- 不建议勾选
- On Windows 10, opencv_saliency module fails to build. So we will disable it. Uncheck BUILD_opencv_saliency,参考【29】,saliency可能要在多次configure后出现。
- BUILD_DOCS:生成文档,需要安装Doxygen,文档可在官网查看,参考【32】。如果DOC不用安装,那么其他的类似Miktex、Sphinx就可以不用安装了【31】。
- WITH_CUDA:先关闭吧,我自己笔记本的CUDA较弱,用CUDA提升有限,以后用到了再安装吧,理解算法的话应该暂时和速度无关。CUDA Toolkit允许你利用GPU的运算能力加速算法,对于特定的算法GPU会提升很大,让更多的算法支持GPU加速是OpenCV团队的不懈努力【31】,我的理解是GPU属于计算层面,算法属于计算的上层。
- caffe模块是深度学习模块,鉴于笔记本的性能暂时不装了,我也不太清楚caffe是怎么个工作模型,用的时候再说吧,笔记安装opencv主要是学习计算机视觉,深度学习部分可以单独安装学习,参考【35】。
- BUILD_opencv_cvv,我的环境是VS2015 64+opencv3.4.0,发现cvv无法编译成功,而python3又依赖cvv,所以干脆就禁用cvv,由于之前版本的opencv也没用到cvv模块,所以禁用了估计也没事。如果以后实在要用cvv,完全可以把cvv项目单独调试,opencv本来就是一个个独立的项目构成的,先把能用的都编译了,不明原因的用到了单独调试个别项目即可,也不需要重新编译整个项目,所以不要担心个别功能模块没有编译成功。
其实吧,有些功能性的模块不编译也没事,如果你是应用当然是编译成DLL直接能用最好了,如果是学习算法,关键还是自己理解算法模块,那样子完全可以自己把CPP文件单独放到一个工程里编译运行,而不需要编译整个opencv项目了。
- 记得把 BUILD_opencv_saliency 勾掉,不勾也没发现问题,可能会产生编译错误,所以还是勾掉吧,这样编译没错误看着舒服
- 再次configure
- 出现新的需要下载的第3方库文件,可以自己下载重命名后放到.cache下,下载的版本根据cmake文件,下载地址依然是 https://github.com/opencv/opencv_3rdparty/branches/all 可以到CSDN上下载别人上传的最新tag版本所需的.cache文件
- 再次configure
为OpenCV配置QT
编译OpenCV的时候选择WITH_QT【2】(把WITH_OPENGL【19】也选上吧),至于这个选项的作用,可能是指OpenCV的highgui模块本身是否使用Qt,highg使用QT后higngui本身的窗口界面会变成基于Qt的,比原来的要好看一些,而且自动集成了一些图片缩放、保存等功能【2】。(那么原来的highgui使用的是什么GUI技术?)
勾选如上图后,点击Configure,得到如下图路径或者通过输入QT搜索得到勾选WITH_QT后重新配置产生的关于QT的项目。
但是上图有一个问题,就是QT相关的路径都是Anaconda下的,而我自己安装了是最新的QT5.9.2版本,我不清楚这几个选项的具体作用,不过改成QT5.9.2应该是没错的,于是把Anaconda相关的路径都替换成自己安装的QT5.9.2的路径,如下图所示,因为OpenCV3.3.0当初用CMAKE编译选择的Generator就是Visual Studio 14 2015 win64,所以QT的预编译版本也选择对应版本,感觉用Anaconda的话应该也可以?不可以,后面发现没有生成opencv_highgui模块,后来把路径修改后,生成这个模块了,但是我还不能确定是不是这个原因导致的。
再Configure一下,然后再Generate,之后Open Project,其实可以不用Open Project,直接在命令行用cmake直接编译Release和Debug版本的代码,如果没有产生install文件夹,说明编译失败,勾掉不必要的选项,好像还是要用VS2015图形界面编译更可靠。
Compile opencv in Release mode【29】
Open Windows Command Prompt (cmd).
Go to OPENCV_PATH/build directory and run this command
E:\OpenCV\tool\cmake-3.10.1-win64-x64\bin\cmake.exe --build . --config Release --target INSTALL 这里INSTALL是解决方案里的目标项目,即生成INSTALL
Compile opencv in Debug mode【29】
Open CMake GUI again
Search “python” in search box
Uncheck INSTALL_PYTHON_EXAMPLES, BUILD_opencv_python3 and BUILD_opencv_python2,经测试若勾选会编译失败?会吗?反正勾掉吧。好像3.4.0取消了
实际上我的opencv3.4.0的情况如下图,我把generator也uncheck了,我的理解是python只要Release版本,调试版本用不到,毕竟python也是调用的编译后的opencv项目,它不能进行调试C++的代码,我是这么理解的。
python2支持,没有发现BUILD_opencv_python2选项,自然也没有pyhon的项目,但是有pyhon3的项目。
Click configure
Click generate
Now in windows command prompt, Go to OPENCV_PATH/build directory and run this command
E:\OpenCV\tool\cmake-3.10.1-win64-x64\bin\cmake.exe --build . --config Debug --target INSTALL
Now that we have compiled OpenCV we will find out how to test a OpenCV project using CMake.
通过VS2015图形界面编译
点击Open Project按钮打开生成的VS工程,待其完全载入后即可编译了,需要注意的是,不要使用默认的生成解决方案(F7)进行编译,这样最终得到的install文件夹中的内容是不全的。正确方法是在INSTALL工程上点右键,选择生成,还是选择重新生成吧,单独编译生成此工程【3】。
最后Open Project打开就能回到熟悉的VS环境中了,直接右键解决方案等它Build完就好了(ps: 生成的文件放在 build\lib\ 和 build\bin\ 目录下,最后通过INSTALL这个项目把相关文件(.h、.dll、.lib等)拷贝到CMAKE_INSTALL_PREFIX目录下面,如果你没有Build INSTALL这个项目是不会拷贝的,跟make之后没执行make install情况一样),参考【32】,我是看了【32】才知道解决方案和INSTALL项目的关系的,好像其他博客都说的不太对。To collect the header and the binary files, that you will use during your own projects, into a separate directory (simillary to how the pre-built binaries ship) you need to explicitely build the Install project【31】.你可以理解为OpenCV库本身就是一个solution,里面有好多projects,之前的编译都是面向solution的,而install则是面向客户的,客户需要是现成能用的成品,这就是INSTALL的作用,通过build INSTALL实现。This will create an Install directory inside the Build one collecting all the built binaries into a single place. Use this only after you built both the Release and Debug versions.其实的话生成的install文件夹也是提供给cmake调用的,因为install目录下生成了
我感觉还是通过下面的两个步骤编译,生成的文件更全面,就是先编译再安装,不过应该效果一样吧。
- 所以我们先清理解决方案,然后重新生成解决方案,我感觉是先重新生成ALL_BUILD项目。
- 然后再重新生成INSTALL项目。
也就是说我们队解决方案的操作也是通过解决方案中的项目来实现的,并不是通过什么外部的工具来实现的。
生成的动态库,如下图
配置系统变量,添加系统变量是添加第3方库设置的常用的便利方法,可以简化改动的地方
- 添加系统变量 OPENCV_DIR,变量值设置为 E:\OpenCV\opencv_build\install 注意末尾不要有 \,值得注意的是,【31】设置的是E:\OpenCV\opencv_build\install\x64\vc14,因为E:\OpenCV\opencv_build\install下有cmake文件提供了所有路径信息,cmake知道在\x64\vc14下,所以用这个目录更合适;为了保证OPENCV_DIR包含平台信息,我后来觉得还是应该包含\x64\vc14,这样才能保证install目录移动时,VS属性表不用修改,只修改OPENCV_DIR。
install目录可以理解为一种绿色软件的目录,我们可以任意搬动,只要修改OPENCV_DIR就可以了。
此外install目录在不同的操作系统在别人的电脑上也都是可能不同的。
更新!!!根据研究重新配置系统变量如下
- OPENCV_DIR设置为E:\OpenCV\opencv_build\install
- 新建一个变量OPENCV_VC设置为%OPENCV_DIR%\x64\vc14
- Path相应地修改为%OPENCV_vc%\bin
- VS里的项目属性表的配置也根据OPENCV_VC来设置
- 添加 E:\OpenCV\opencv_build\install\x64\vc14\bin 或者 %OPENCV_DIR%\x64\vc14\bin 到系统变量PATH,相当于程序的安装路径;
If you built static libraries then you are done. Otherwise, you need to add the bin folders path to the systems path. This is cause you will use the OpenCV library in form of “Dynamic-link libraries” (also known as DLL). Inside these are stored all the algorithms and information the OpenCV library contains. The operating system will load them only on demand, during runtime. However, to do this he needs to know where they are. The systems PATH contains a list of folders where DLLs can be found. Add the OpenCV library path to this and the OS will know where to look if he ever needs the OpenCV binaries. Otherwise, you will need to copy the used DLLs right beside the applications executable file (exe) for the OS to find it, which is highly unpleasent if you work on many projects. To do this start up again the Path Editor and add the following new entry (right click in the application to bring up the menu):
%OPENCV_DIR%\bin 【31】
- This directory OPENCV_DIR contains file “OpenCVConfig.cmake”. This is used by CMake to configure OpenCV_LIBS and OpenCV_INCLUDE_DIRS variables to generate project files;
Testing C++ code with CLion【29】
下载测试代码redEyeRemover code,参考【29】。
运行C++代码可以利用cmake的纯命令行形式,或者通过CLion配合cmake,这里利用CLion。
首先利用CLion+命令行的形式,然后只利用CLion编译运行。
利用CLion+命令行的形式
修改CLion控制台程序为sh.exe或者powershell.exe
Working with Embedded Local Terminal
在RedEyeRemover文件下新建CLion工程,然后创建一个CMakeLists.txt文件,在文件中输入:
cmake_minimum_required(VERSION 2.8)
project( redEyeRemover )
find_package( OpenCV REQUIRED ) 这个地方注意了,cmake是根据系统变量OPENCV_DIR来找到cmake文件的,所以OPENCV_DIR我们设置为install路径,而新建一个变量OPENCV_VC设置为%OPENCV_DIR%\x64\vc14
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( removeRedEyes removeRedEyes.cpp )
target_link_libraries( removeRedEyes ${OpenCV_LIBS} )
其中包含了之前生成OpenCV的头文件路径和DLL动态库路径。
在CLion下面的终端里运行如下命令来编译我们的removeRedEyes.cpp源代码:
# create build directory
mkdir build
cd build
# create Visual Studio project files using cmake,可以理解为之前的configure和generate
cmake -G "Visual Studio 14 2015 Win64" ..
下面构建(编译+链接)我们的应用程序:
# build our application,可以理解为生成目标项目了
cmake --build . --config Release
# once the build is complete, it will generate exe file in build\Release directory
下面在主目录装载应用程序,应用程序会查询调用目录下的图片文件:
cd ..
.\build\Release\removeRedEyes.exe
.\build\Release\main.exe .\opencv-logo.png
应用程序执行结果
没有出现图片!!!折腾了一天居然没有出现图片,比较打击,考虑到我使用的QT,所以想先测试下图片读取功能是否正常,打算先测试最简单的图片显示【2】。还是官方文档齐全,QT显示图片的例子早就在官方文档里了。用我那个Example1里的示例吧。
只利用CLion编译运行,但是无法编译运行(对CLion不熟悉),CLion编写OpenCV应用程序还是当编辑器用吧,用命令行编译,生成VS工程还是可以用VS打开,cmake生成的项目文件都在build目录
Visual Studio Quick Tutorial on Configuring CLion on Windows
MinGW
How to build applications with OpenCV inside the "Microsoft Visual Studio",如何使用VS构建依赖OpenCV的应用程序
VS2015工程配置,之前配置VS的OpenCV项目规则一直很困惑,不过现在彻底搞明白了,主要参考【6】,我用一个流程图彻底解释清楚
不过如果想对OpenCV源码进行Debug跟踪,是不能选用.\install文件夹中的库文件的,因为此处缺少.pdb调试文件,无法正常Debug。此时需要使用.\lib文件夹中的库文件,这时可以正常的跟踪到源代码中,且使用profiler分析代码性能时也可以正确定位到OpenCV内部函数上【3】。
关于库、DLL、lib、pdb概念的理解,我理解库是相对的,如果拿游戏类比,库就好比是武器装备库,而每件武器可能又有自己的配件库,库的内容不同大小不同,但是调用方式是相同的【4】。参考资料【4】给出的最小原型动态链接库可以和QT库、OpenCV库在调用配置上等价。
这里只说下对OpenCV的DLL的理解,更准确的参考资料【5】。
OpenCV其实是一个一个的功能模块,每个模块对应一些CPP文件和H文件,CPP文件经过编译就生成DLL(而普通软件生成EXE)和LIB(这是用于LINK的,可以理解为一个DLL的伪静态LIB占位符,否则的话就是静态LIB了)、以及include里的头文件。
而头文件H文件就被搬运到一个专门的INCLUDE目录。
使用库的人叫做客户端Client或者应用程序Application,他们要使用库的功能,其实就是使用那些模块函数了,就要配置项目。配置的话也无非3个方面,其中第3个方面又分为2个,所以一共4个地方需要配置:
- 头文件的路径,也就是DLL中函数的路径;
- DLL的路径,由于DLL是程序运行时的才调用,所以DLL路径要放到系统环境变量PATH;
- 占位符伪LIB的路径,这个比较特殊,要配置两个方面,其实也不难理解。一个就是LIB所在的目录路径,一个就是需要该目录下的哪些LIB,全要的话自然生成的程序体积就大了。不过对于DLL来说,占位符的伪LIB体积不大多了其实也没事,所以就全写进去了?
新建solution时,选择空项目,这样一来项目文件夹都是空的没有预备的文件在里面,更加灵活。
测试OpenCV的QT安装效果
参考资料【6】
最后显示图像的highgui界面确实是调用的QT库测试VS插件的QT安装效果【7】
参考资料【7】操作后可以实现一个空白GUI框
不过QT有一个官方版本的VS插件,所以重新下载使用官方的插件,但是安装后使用出现问题【12】,所以还是用qt package插件吧,插件也只是项目组织功能,官方不官方也无所谓了。
几个概念:
moc 元对象编译器
uic 用户接口编译器
rcc 资源编译器
.pro Qt工程文件
.pri 工程包含文件
插件的使用参考资料【14】测试OpenCV和QT联合编程效果
参考资料【13】
其中.pro文件不需要配置,因为那是给QT Creator用的,只要把项目属性里关于OpenCV库和QT库的部分配置一下(这两个库的配置项目几乎是一样的),QT其他部分的配置由QT插件完成了。
术语
build directory
runtime argument
compiler
linker
补充:
Anaconda是什么?参考【30】
Anaconda是一种python的发布版本,我理解就是类似Ubuntu是Linux的一种发布版本一样,就是说强化了python核心,虽然我也说不清楚pyhon核心是什么。
Python虚拟环境配置方法?参考【30】
conda create --name opencv-env python=3.6
activate opencv-env
pip install numpy scipy matplotlib scikit-learn jupyter
pip install opencv_python-3.3.1+contrib-cp36-cp36m-win_amd64.whl
pip install dlib
import cv2
cv2.__version__
import dlib
dlib.__version__
如何复制OpenCV安装目录下的lib目录下的*.lib和*d.lib?
使用win10的bash模式
opencv_(The Name of the module)(The version Number of the library you use)d.lib
opencv_world340.lib 因为考虑到生成1个lib文件可能减慢速度我就没弄这个
过滤*.lib
过滤*d.lib
框架、工具、库的区别?
框架和库的区别可以参考【50】,工具的话,我的理解就是系统方面的,和计算机视觉没什么关系的东西,比如生成 OpenCV documentation 的工具。
框架的我感觉就是解决一类问题的一个模式架构,随便说的。比如QT框架,要显式图片,你把图片数据填充到框架的API中,然后调用显式图片的API,QT框架就帮你把图片显式出来。而中间图片的处理我们可以调用OpenCV库里的各种算法来处理。
库的话好比工具箱,解决一类问题的各种方法的实现集合。
命令行设置环境变量的方法?
setx -m QTDIR D:/OpenCV/dep/qt/qt-everywhere-opensource-src-4.7.3
The -m should be added if you wish to make the settings computer wise, instead of user wise.
Path是做什么用的?
Path一般用来配置bin目录的路径。
make与build的区别?没有找到很好的答案
make常用在具体事物,e.g. make a conversation, make a reservation
build可以用在抽象事物上,e.g. build an empire, build a relationship
关于Intellij IDEA菜单项中Compile、Make和Build的区别
库按的安装时提供DLL(内存运行时调用),QQ的安装时提供一个QQ.exe给我们登录,都是安装,只是对象不同。
VS的文件组织结构?
应用程序-->代码层面: solution-->building blocks: multiple projects-->a main project(组
织所有的项目拼图到一起,所有项目就好比拼图solution的一部分)
我们平时练习小应用程序的时候可以每个应用程序都建立一个solution,也可以都放到一个solution里面,然后通过main project屏蔽不需要的building blocks: projects,和solution同名的那一个project作为main project。
其实,我理解solution平时可能也叫做项目,这是对于外部而言,而项目内部而言,我们可能划分为多个building blocks,此时那个所谓的项目就变成了solution了,当然了这是就应用程序组织而言的。
事实上一个solution可以是一个很大的应用程序,比如QQ所有代码就是一个solution,然后分成多个模块进行分工。
有用的VS2015插件?有些有用的插件VS2017还没有更新,所以还是使用VS2015吧,VS2017的更新我觉得其实也用不上。
如何打开VS属性管理器视图?
视图菜单下
如何通过宏引用不同lib?参考【33】,没看懂什么意思,光看应用肯定不懂了
- #ifdef _DEBUG
- # define RLIB_IMPORT_LIBRARY(a) __pragma(comment(lib, a "d.lib")) 1
- #else
- # define RLIB_IMPORT_LIBRARY(a) __pragma(comment(lib, a ".lib"))
- #endif // _DEBUG
- // 用法如下
- RLIB_IMPORT_LIBRARY("opencv_world340") // world 其实是 All In One
- // RLIB_IMPORT_LIBRARY("opencv_core340")
- // RLIB_IMPORT_LIBRARY("opencv_highgui340")
- // RLIB_IMPORT_LIBRARY("opencv_imgproc340")
- // RLIB_IMPORT_LIBRARY("opencv_imgcodecs340")
- // RLIB_IMPORT_LIBRARY("opencv_features2d340")
- // RLIB_IMPORT_LIBRARY("opencv_calib3d340")
- // RLIB_IMPORT_LIBRARY("opencv_objdetect340")
如何美化VS2015使得编程更舒服护眼?
- 主题
- 字体
- Inziu losevkaCC Slab SC 用于输出窗口
- YaHei Consola Hybrid 用于代码编辑窗口
- 背景色(Colour palette)
- 440030 深紫色 用于输出背景色
- 475760 灰绿色 用于编辑背景色
疑问TODO?
- 如何修改/添加OpenCV代码,完成pull request;
参考文献
【4】Walkthrough: Creating and Using a Dynamic Link Library (C++)
【6】How to build applications with OpenCV inside the "Microsoft Visual Studio" 该官方文档对如何调用INSTALL后的OpenCV的原理讲解十分清楚,有很多中文博客几乎没有人提到的细节,其他博文都可以看做该文档的注释版本,很多人都在网上搜各种教程却不愿意阅读官方文档,确实很奇怪。其实任意博文都是官方文档额注释和应用罢了
【8】详解 QT 框架中快速应用OpenCV 基于图片 上篇
【9】详解 QT 框架中快速应用OpenCV 基于视频播放 下篇
【10】《Qt 学习之路 2》
【12】Run Qt5.6 on VS2015 & “无法迁移项目文件” & "Cannot instantiate QtProjectEngine object"错误的解决方法
【13】How to setup Qt and openCV on Windows
【15】[OPENCV QT TUTORIAL] OPENGL WIDGET TO SHOW OPENCV IMAGES IN A QT GUI (FIRST PART)
【16】[OPENCV QT TUTORIAL] OPENGL WIDGET TO SHOW OPENCV IMAGES IN A QT GUI (SECOND PART)
【17】[TUTORIAL OPENCV QT] HOW TO COMPRESS AN IMAGE IN MEMORY
【29】Install OpenCV 3 on Windows
【30】Install OpenCV 3 and Dlib on Windows ( Python only )
【32】使用 CMake + VS2017 ( + Python 3) 配置和编译 OpenCV 3.3
【33】【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境 - 菜鸟小筑 - CSDN博客 这个博客对编译和VS项目属性设置方面也讲得很好
【36】errors on build opencv with cvv module and qt5
【37】Windows环境下最新OpenCV和Contribute代码的联合编译
【39】Windows 7 and TortoiseGit contribution guide
【51】Write and Manage Code using Visual Studio Documentation
【52】CMake:How To Find Libraries
【53】CMake find_package for OpenCV
【54】Python Extension Packages for Windows - Christoph Gohlke
【55】How to: Change the Build Output Directory