Python、C++、Android OpenCV 开发环境的配置

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

作者:星陨

来源:音视频开发进阶


OpenCV 的安装

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

源码编译

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

1、https://www.pyimagesearch.com/2016/12/05/macos-install-opencv-3-and-python-3-5/

2、https://www.pyimagesearch.com/2015/06/29/install-opencv-3-0-and-python-3-4-on-osx/

大致操作都是要从 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

正好在 OpenCV 的 Github 上有个 Issue 也提到了这个问题:https://github.com/opencv/opencv/issues/7474 给出的原因是因为没有安装好 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 中创建一个命令行工程。

然后在工程名处右键,选择 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

效果图如下:


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

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

//
//  main.cpp
//  OpenCVEnv
//
//  Created by glumes on 2017/11/7.
//  Copyright © 2017年 glumes. All rights reserved.
//
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cvaux.hpp>
#include <fstream>
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 版本的。

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

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

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


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

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

implementation project(':OpenCVLibrary330')

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

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


接下来修改 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} )

具体的详细配置 Demo 可以参考我的 Github 地址 https://github.com/glumes/AndroidOpenCV

参考

1、http://www.jianshu.com/p/11959977589a


标签: Opencv  

「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。  

阿里云社区.png

相关文章
|
2天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
33 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
29天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
79 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
1月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
36 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
2月前
|
Java 开发工具 Android开发
安卓与iOS开发环境对比分析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文深入探讨了这两个平台的开发环境,从编程语言、开发工具到用户界面设计等多个角度进行比较。通过实际案例分析和代码示例,我们旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和个人偏好做出明智的选择。无论你是初涉移动开发领域的新手,还是寻求跨平台解决方案的资深开发者,这篇文章都将为你提供宝贵的信息和启示。
45 8
|
3月前
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
4月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
4月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境的差异性分析
【10月更文挑战第8天】 本文旨在探讨Android和iOS两大移动操作系统在开发环境上的不同,包括开发语言、工具、平台特性等方面。通过对这些差异性的分析,帮助开发者更好地理解两大平台,以便在项目开发中做出更合适的技术选择。
|
4月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
1025 3

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    Android历史版本与APK文件结构
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 推荐镜像

    更多