写在前面的话
OpenCV是偶然接触到机器视觉的一部分,完全从零开始,以下是个人在安装OpenCV
和JavaCV
的部分经验,因为上一边踩坑一边安装的,难免很多地方装了一半就没删去,而且这是回顾之前的过程,仅供参考,欢迎讨论。
1. OpenCV
OpenCV
是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,同时,具有C ++,Python,Java和MATLAB接口,主要倾向于实时视觉应用。简而言之,OpenCV
是搞图片视觉分析的,简单,好用。
2. MAC上的OpenCV
公司电脑清一色是Mac,还有个台式机装ubuntu用来测试,所以我的opencv学习都是在这两个平台上的,如果错误,欢迎指正。
2.1. 安装Python
- Mac上自带的是
Python 2.7
- 我的建议是用新的
python
,毕竟3.0
以后的语法稍微不同,以后也应该是主流。
-
提供两种安装方式:
1.brew install python3
,等待自动安装,进行配置。
2. Python官网,选择对应系统的Python
安装即可,安装后可自动配置环境。
-
小tips:如果在terminal里面输入:
python
默认是打开自带的2.7
的版本,输入python3
,才会进入到新的环境。
2.2. 安装OpenCV
安装教程只是提供个大概,因为我不是一边装一边写的博客,这只是回忆过程(可能会有错误,不能保证),网上教程很多,且安装简洁。
建议使用pip安装,源代码编译属实麻烦。
pip3 install opencv-python
顾名思义,安装OpenCV的python拓展
测试本地OpenCV环境
import
进的cv2
没报错,代表本地环境搭建完成,可在python的默认编辑器内使用。
2.3. PyCharm中的OpenCV使用
安装上OpenCV
以后,不代表本地的不代表本机的PyCharm
中就能使用,还需要安装一下package
。
打开preference
左侧表示的是当前项目下的package,我这里项目名:
pythonProject3
右侧➕号下,是我当前已经项目中已经安装的package,意味着import 不会出错
install 即可使用,这里我用的是opencv-python
放上一个测试小demo:
import cv2 as cv
# 填写图片路径
img = cv.imread('/Users/mac/PycharmProjects/pythonProject3/image/lenna.jpg')
cv.show("img", img)
cv.waitKey(0)
3.Ubuntu上的OpenCV
本来老板搞出了个python上的demo让我接着往下搞,我就在python上边学习边摸索。没想到搞出来个小案例以后,老板说JAVA上有个JavaCV封装了O喷CV,你在python上能跑通,Java上也一定能转型成功。行吧,发工资的最大,不过重新学习一下JAVACV。下文是我在Ubuntu的JavaCV的坑,仅作参考。
3.1 Ubuntu上装OpenCV-Python
我既然能在Mac上跑通我的demo,那么同样的代码,在Ubuntu下的环境里也应该能跑通吧。既然这样。。。。那么第一步,先在Ubuntu上装个python
和OpenCV
跑跑测试一下。(这里默认在Ubuntu上已经装了Python
)
- 安装OpenCV环境
Ubuntu上的环境特别麻烦,需要
cmake
安装
这里贴一个博主的帖子,主要过程大同小异(侵删)。https://blog.csdn.net/public669/article/details/99044895
注:这里是装在了本机的环境中,因为安装编译了一系列库 - PyCharm中使用OpenCV
**我不确定**是否一定要先第一步,因为在可以在PyCharm中package
中搜opencv-python
。
理论上在PyCharm中装上这个package
便可import
使用。 - 测试
这里还可以用上文贴的demo测试,就不贴了。
3.2 Ubuntu上装JavaCV
重头戏来了,Java CV!!
JavaCV的文档本来就很少,且每个人多多少少都会遇到一些坑。当我们面向百度去搜索相关内容的时候,就会借鉴出别人的坑,引入更大的坑。所以,一切仅供参考,欢迎讨论。
- 明确你想怎么在JavaCV中使用OpenCV
网上一搜Ubuntu安装JavaCV,很多推荐的都是源文件代码编译,大致目的是为了编译出Ubuntu下需要的.jar和.so文件,从而在Java中运行jar,实现导入,这里推荐另外一种方式。
我在初期也是编译到了一半,发现导入使用的时候一直报错,后来发现了新方法。
- Maven仓库使用JavaCV
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.5</version>
</dependency>
切记两个maven
依赖一个都不能少,这个是maven仓库中的JavaCV
,而JavaCV
包含了对OpenCV
的封装,当然其中也封装了FFmpeg等接口,可通过JavaCV
直接调用。
- 挖坑
在这里给大家挖几个坑
- 切记不要搜索.dll或者.so动态链接一类的文章,这是一条不归路,是因为这是源代码编译才会引出的结果,我们用的是maven依赖,互不相干,一般maven中的就够用了
- 编写代码时,不要
import
错包! 例如:一般是org.bytedeco.opencv.*
下的包,不要导入org.opencv.*
,完全不一样,后者好像是源代码编译后,在javaProject项目结构中引入jar导入使用的(我也是猜测)。- 这种
JavaCV
的不需要网上说的那种System.load()
去加载本地的jar包,那也是一条不归路。
- 测试
放个demo试试
public static void main(String[] args) {
Mat mat = imread("/Users/mac/IdeaProjects/JavaCV/images/test.jpg");
imshow("img",mat);
waitKey(0);
}