在 Mac 上折腾了一下 OpenCV 的配置,分别配置了 Python 、C++ 和 Android 上的开发环境,中间还遇到点坑,简要记录一下。

OpenCV 的安装

OpenCV 的安装有两种方式,可以通过下载源码自行编译,也可以通过homebrew来安装。

源码编译

通过源码编译可以参考下面这两篇文章:

大致操作都是要从 Github 上下载好源码,然后配置 cmake ,再通过 make 编译出 cv2.so 库。

Homebrew 安装

通过 homebrew 来安装 OpenCV 就相对简单多了。

直接 brew install opencv 命令就好了。

不过,要注意的是:下载好的 OpenCV 还在 /usr/local/Cellar/opencv/3.3.1_1/ 目录下。

这时候,在 Terminal 上,直接运行 Python3 命令,然后在交互式环境中通过 import cv2的命令来导入 OpenCV 的库依旧是找不到的。

解决办法就是进入到 /usr/local/lib/python3.6/site-packages 目录下,通过 ln 命令将 /usr/local/Cellar/opencv/3.3.1_1/lib/python3.6/site-packages 目录下的 cv2.so 链接到当前目录。

///usr/local/lib/python3.6/site-packages 目录下执行如下指令

sudo ln -s /usr/local/Cellar/opencv/3.3.1_1/lib/python3.6/site-packages/cv2.so cv2.so

这样就可以完成导入了。

Python 配置 OpenCV 环境

Python 开发用的 IDE 是 PyCharm。

事实上在 PyCharm 的 Project Interpreter 中可以添加 Python 库的,直接选择 opencv-python 库就好了,它最终也是通过 pip命令来下载对应的库的。

但却有个问题:

通过这种方式安装的 OpenCV 在运行播放视频的代码时会出错:

import cv2

videoUrl = "/Users/glumes/Desktop/kpt1.mp4"

cap = cv2.VideoCapture('/Users/glumes/Desktop/kpt1.mp4')

while(cap.isOpened()):

ret, frame = cap.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

cv2.imshow('frame', gray)

if cv2.waitKey(0) & 0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

报错的内容是:The current event queue and the main event queue are not the same。

给出的原因是因为没有安装好 ffmpeg。

所以还是建议直接通过 brew 的方式安装,然后再创建链接好了。

安装好之后,就可以开始运行我们的 OpenCV 代码了。

简单的展示一张图片代码示例:

import cv2

print(cv2.__version__)

imgUrl = '/Users/glumes/Desktop/blog_camera_block.png'

img = cv2.imread(imgUrl,0)

cv2.imshow('image',img)

cv2.waitKey(0)

print("waiting")

cv2.destroyAllWindows()

C++ 配置 OpenCV 环境

C++ 开发用的 Mac 的 Xcode。

首先要在 Xcode 中创建一个命令行工程。

mac-command-line-project

然后在工程名处右键,选择 Add File to Project,通过快捷键 Command+Shift+G进入到 /usr/local/lib目录下,将所有和 OpenCV 相关的 dylib 库添加进来。

完成了之后,再到工程的 Build Settings中去添加对应的头文件和库文件。

找到 Search Paths,然后在 Header Search Paths 中添加

/usr/local/include

/usr/local/include/opencv

在 Library Search Paths 中添加

/usr/local/lib

效果图如下:

xcode_build_setting

完成之后,就可以开始编写 C++ 代码来开发 OpenCV 了。

同样还是预览一张图片作为示例:

//

// main.cpp

// OpenCVEnv

//

// Created by glumes on 2017/11/7.

// Copyright © 2017年 glumes. All rights reserved.

//

#include

#include

#include

#include

#include

using namespace std;

#define BYTE unsigned char

int main(int argc, const char * argv[])

{

//这个地方的目录需要改成自己的

IplImage* img = cvLoadImage("/Users/glumes/Desktop/blog_opengl_result_point.png", 1);

cvNamedWindow("picture", 1);

cvShowImage("picture", img);

cvWaitKey(0);

cvReleaseImage(&img);

cvDestroyWindow("picture");

return 0;

}

点击运行,当编译成功时,就可以看到多了一个命令行窗口,里面就是我们预览的图片内容。

完成了开发环境的配置之后,就可以愉快地进行 OpenCV 开发咯。

Android 配置 OpenCV 开发环境

在 Android 上配置 OpenCV 的环境相对就简单多了。

首先要做的就是在官网上 https://opencv.org/releases.html 下载好对应的 SDK ,有 2.x 版本的也有 3.x 版本的。

解压之后,主要有三个目录:apk、sdk、samples,要关心的就是sdk目录了。

在 AS 上新建一个 Android 工程,创建时最好先勾选了 C++ Support 选项,后面会在 CMakeLists.txt 文件中进行更改。

然后选择 Import Module,在弹出的框中,选择下载好的 SDK 的 java 文件夹,如下图:

import_opencv_module

这会将 OpenCV 提供的对 NDK 调用封装的库以依赖的形式导入到我们的工程。

别忘了在工程的 build.gradle 添加如下代码来导入

implementation project(':OpenCVLibrary330')

之后,就是导入 so 动态库。

将 OpenCV-android-sdk\sdk\native\libs 目录下的内容拷贝到应用的 jibLibs 目录下。

import_opencv_sp

接下来修改 CMakeLists.txt 文件,将头文件和库进行导入。

# 包含头文件

include_directories(/Users/glumes/Downloads/OpenCV-android-sdk/sdk/native/jni/include)

# 添加 lib_opencv 动态库

add_library( lib_opencv SHARED IMPORTED )

# 设置库的导入路径

set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)

这里仅仅是导入了 libs 目录下的动态 so 库,也可以将静态的 .a 库导入。

完成了这一步后,就可以用 C++ 进行 OpenCV 的开发了。

在默认的 native-lib 动态库中,添加 opencv 的动态库,这样就可以链接到了。

target_link_libraries( # Specifies the target library.

native-lib

# 链接 opencv 的动态库

lib_opencv

# Links the target library to the log library

# included in the NDK.

${log-lib} )

参考

一起交流学习,答疑解惑,有问题,我们星球见~~~

图形/图像/音视频交流

觉得文章还不错,可以关注一下微信公众号【纸上浅谈】

Wechat

android python opencv_Python、C++、Android OpenCV 开发环境的配置相关推荐

  1. android安装python opencv_Python、C++、Android OpenCV 开发环境的配置

    在 Mac 上折腾了一下 OpenCV 的配置,分别配置了 Python .C++ 和 Android 上的开发环境,中间还遇到点坑,简要记录一下. OpenCV 的安装 OpenCV 的安装有两种方 ...

  2. QT配置opencv开发环境

    0 编译.配置OpenCV的工程相当曲折,编译OpenCV不下5次,一开始还以为是自己的配置.编译步骤有问题,后来发现原来是自己电脑装的Qt Creator版本有点低,里面的MingW版本较低,而Op ...

  3. 海康威视摄像机的实时读取篇一(OpenCV开发环境配置)

    利用海康SDK+OpenCV,实现海康摄像机图像实时读取.篇一介绍环境配置及相关注意事项. OpenCV开发环境配置 1.下载opencv-2.4.11(其他版本配置过程相似),下载完成后,双击文件会 ...

  4. android搭建opencv开发环境,Android Studio搭建opencv开发环境

    文章不配图片,阅读需要有Android开发基础并熟悉Android Studio. 一.搭建基于Java开发环境 以下内容介绍如何搭建基于Java jni的opencv开发环境. 1.准备工作 从op ...

  5. 基于Eclipse平台的Android OpenCV开发环境搭建

    基于Eclipse平台的Android OpenCV开发环境搭建 作者:雨水, 日期:2016-1-31,CSDN博客:http://blog.csdn.net/gobitan 摘要:本文主要记录了如 ...

  6. Android开发环境简单配置

    为什么80%的码农都做不了架构师?>>>    ·         Android开发环境简单配置 写这个系列的原因也是因为自己对android比较感兴趣,而网上多数教程都是直接参照 ...

  7. Android开发--环境的配置

    Android开发--环境的配置 一 Android开发环境:JDK.eclipse ADT.海马模拟器或者夜神模拟器.配置之前先保证运行内存足够大,不然会导致运行卡. 二 JDK(不用安装) 1.j ...

  8. Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建

    Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C++平台的搭建,尽管以前有成功在Windows X ...

  9. Ubuntu Linux环境下的Android开发环境的配置

    在Android底层开发中需要用到的工具有:JDK6或以上版本:Eclipse3.4或以上版本:ADT;CDT;Android SDK:Android NDK:交叉编译环境:Linux内核源代码:An ...

最新文章

  1. Redis初学:4(Redis的常用命令)
  2. html 表格自动计算,HTML表格中的JavaScript计算
  3. 一个简单的动态内表alv案例
  4. [转]IPython介绍
  5. 【WebRTC---进阶篇】(三)各流媒体服务器的比较
  6. linux原理与应用期末考试,武汉大学计算机学院2009-2010学年第一学期期末考试《Linux原理与应用》期末考试试卷(共8套,有答案)...
  7. 手淘促活那些事儿 | 智能投放算法框架助力用户增长
  8. 华为云原生数据仓库GaussDB(DWS)深度技术解读:融、快、大、稳、易
  9. kafka 脚本发送_Apache-Flink深度解析-DataStream-Connectors之Kafka
  10. android 5.1.1 sd卡权限,android - 适用于Android 5.1.1及更高版本的Cordova的外部存储路径(SD卡) - 堆栈内存溢出...
  11. python 日期的周数_术业有专攻:日期时间模块datetime
  12. FlashFXP如何破解
  13. 高速列车横向17自由度模型
  14. 淘宝刷单怎么刷?买手黑号为什么会成为黑号?
  15. HTTPHEAD中referer应用
  16. html5 制作游戏
  17. 【踩坑记录】导航时出现原地旋转,然后无法执行导航
  18. 实战分享:GNSS知识汇总
  19. 深圳办理cdn经营许可证_申请cdn许可证变更「深圳办理cdn经营许可证」
  20. 小程序接入「微信对话开放平台」,创建对话客服机器人

热门文章

  1. JSP-EL表达式语言
  2. 独立产品灵感周刊 DecoHack #050 - 基于 ChatGPT 的 API 能做什么产品
  3. java 枚举报错 No enum constant XX 处理方法
  4. VMware下Linux的NAT网络显示叉,无网络服务情况解决方案
  5. 【信息安全案例】—知识点复习(期末不挂科版)
  6. 浅谈时尚杂志类APP开发
  7. EAP 认证 五元组转换三元组算法实现
  8. 查看服务器会话链接信息,配置远程桌面服务会话的远程控制
  9. 2017-12-05 JavaScript实现ZLOGO子集: 前进+转向
  10. nginx配置https后,重定向总是跳转到http