学习OpenCV4(一)-安装和配置

最近公司要做一些关于图片的业务,遂学习一下相关知识.我在学习一项新技术的时候,习惯是先找几本比较好的书籍来看,然后在考虑实际场景.这次找了两本书:

  1. Digital Image Processing 4th Edition [Rafael C. Gonzalez]
  2. Learning OpenCV 3–Computer Vision in C++ with the OpenCV Library

第一本就是比较有名的"数字图像处理",第三版有中文版,但是很多吐槽翻译的太烂,所以这里我就选择了第四版的英文来看.第二本比较偏实践的,正文含很多可执行代码,可以用来练手.两本书我是一起看的(虽然在内容是两本书没啥关联).我安装的是OpenCV 4.0.1,书是关于OpenCV 3的,但是语法差不多.另外有一本"Learning OpenCV"版本较老,书中代码在OpenCV 4环境下无法执行,所以还是不要看了.

安装

这里仅介绍在MacOS下的安装方法,其他系统没试过,也不想试.

  • 首先,安装Xcode,这个不多说
  • 安装 Homebrew

/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

  • 安装 OpenCV 4

brew install opencv

注意,
1.使用brew下载opencv的时候回自动下载pkg-config和cmake,如果没有正常下载,请使用brew手动下载这两个
2.截至2019-02-28,网上的绝大多数教程都是关于OpenCV3或OpenCV2的,对OpenCV4并不适用,下面会提到

编译程序

编写一段书中的代码: display-picture.cpp

#include <opencv2/opencv.hpp>

int main(int argc, char **argv) {
    cv::Mat img = cv::imread(argv[1], -1);
    if (img.empty()) {
        return -1;
    }
    cv::namedWindow("Example1", cv::WINDOW_AUTOSIZE);
    cv::imshow("Example1", img);
    cv::waitKey(0);
    cv::destroyWindow("Example1");
    return 0;
}

1. 使用g++

一开始在网上找的资料基本都是这种:

g++ $(pkg-config --libs --cflags opencv) display-picture.cpp -o display-picture

但是会报错,提示: ‘opencv2/opencv.hpp’ file not found ,试了好多方法都没有解决,后来觉得可能是版本的问题,所以把opencv改为opencv4,才解决了这个问题.

g++ $(pkg-config --libs --cflags opencv) display-picture.cpp -o display-picture

但是又出现了另外一个问题:

In file included from /usr/local/Cellar/opencv/4.0.1/include/opencv4/opencv2/opencv.hpp:52:
In file included from /usr/local/Cellar/opencv/4.0.1/include/opencv4/opencv2/core.hpp:52:
/usr/local/Cellar/opencv/4.0.1/include/opencv4/opencv2/core/cvdef.h:656:4: error: "OpenCV 4.x+ requires enabled C++11 support"

macOS下的g++版本是4.2.1,可能是他默认的-std c++版本比较低,所以才会这样,原因如下:

如果您说的是 GUN 的 GCC 而不是 Clang 的话,怕是一句 brew install gcc 就能解决了。题主作为有这种需求但是还会跑来知乎找答案的有志青年,相信你一定已经或迟早会安装brew的。–然而 brew 又需要先安装 xcode command line tool。现在的 xcode command line tool 自带 clang。还强行把 gcc 这个命令名占了。所以你只能委屈的使用 gcc-7 调用 GNU 的 gcc 了。
作者:杨涛
链接:https://www.zhihu.com/question/20588567/answer/166719802
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

所以在命令中指定 -std=c++11就行了(大于等于11都可以):

g++ $(pkg-config --cflags --libs opencv4) -std=c++14 display-picture.cpp -o display-picture

可以参考一下这篇文章

2.使用cmake

  1. display-picture.cpp所在目录下新建文件CMakeLists.txt,内容如下
cmake_minimum_required(VERSION 3.13)
project(display-picture)
find_package(OpenCV)
set(CMAKE_CXX_STANDARD 14)
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(display-picture display-picture.cpp)
  1. 执行命令:
cmake .
  1. 在CMakeLists.txt末尾加上一行:

target_link_libraries( display-picture ${OpenCV_LIBS} )

  1. 执行命令
make

3.使用Clion

在Clion中新建C++ Executable项目,修改main.cpp为:

#include <opencv2/opencv.hpp>

int main(int argc, char **argv) {
    cv::Mat img = cv::imread(argv[1], -1);
    if (img.empty()) {
        return -1;
    }
    cv::namedWindow("Example1", cv::WINDOW_AUTOSIZE);
    cv::imshow("Example1", img);
    cv::waitKey(0);
    cv::destroyWindow("Example1");
    return 0;
}

修改CMakeLists.txt为:

cmake_minimum_required(VERSION 3.13)
project(learning_opencv3)
find_package(OpenCV)
set(CMAKE_CXX_STANDARD 14)
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(learning_opencv3 main.cpp)
target_link_libraries( learning_opencv3 ${OpenCV_LIBS} )

执行build,即在cmake-build-debug目录下生成display-picture可执行文件.
[外链图片转存失败(img-Z5LgIOmM-1563972700568)(https://user-images.githubusercontent.com/9245002/53567513-65c62e80-3b9a-11e9-9278-e35999a155cc.png)]

安装Java开发环境

首先检查Apache Ant有没有安装,没有的话就用homebrew安装:brew install ant

编辑homebrew的opencv formula: brew edit opencv,把这一行:-DBUILD_opencv_java=OFF 改为 -DBUILD_opencv_java=ON,就可以下载opencv了:brew install --build-from-source opencv

在IntelliJ IDEA中使用OpenCV

安装的opencv位于/usr/local/Cellar/opencv/4.x.x,jar文件位于/usr/local/Cellar/opencv/4.x.x/share/java/opencv4

打开IDEA,选择File->Project Structure->Libraries,点击+号,选择Java,在文件系统中找到opencv-410.jar,将库的名字改为opencv_java410,OK.如下图所示
[外链图片转存失败(img-uOdQ1WGK-1563972700569)(https://user-images.githubusercontent.com/9245002/57754380-e0760300-7720-11e9-9b03-79aa76869ae3.png)]

通过添加VM参数指定库的位置(Run->Edit Configurations…).如果纯java项目可以在main函数所在的类添加VM参数.
[外链图片转存失败(img-iNnpqrHb-1563972700570)(https://user-images.githubusercontent.com/9245002/57757289-b70ca580-7727-11e9-9d45-0f98bbea6b4e.png)]

在使用运行opencv前加载库,这里NATIVE_LIBRARY_NAME的值应与我们设置的库名相同,即opencv_java410
[外链图片转存失败(img-iRAw7jBL-1563972700570)(https://user-images.githubusercontent.com/9245002/57757565-4d40cb80-7728-11e9-9a50-0f754283df85.png)]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值