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

相关文章
|
4月前
|
并行计算 算法 数据可视化
基于OpenCV C++实现的光流法目标检测
基于OpenCV C++实现的光流法目标检测
|
9月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
614 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
9月前
|
Python
在VScode环境下配置Python环境的方法
经过上述步骤,你的VSCode环境就已经配置好了。请尽情享受这扇你为自己开启的知识之窗。如同你在冒险世界中前行,你的探索之路只有越走越广,你获得的知识只会越来越丰富,你的能力只会越来越强。
842 37
|
Shell Linux Ruby
Python3虚拟环境venv
`venv` 是 Python 的虚拟环境工具,用于为不同项目创建独立的运行环境,避免依赖冲突。通过 `python3 -m venv` 命令创建虚拟环境,并使用 `source bin/activate` 激活。激活后,所有 Python 包将安装在该环境中,不影响系统全局环境。退出环境使用 `deactivate` 命令。每个虚拟环境拥有独立的包集合,确保项目间的隔离性。删除虚拟环境只需删除其目录即可。
1283 34
|
11月前
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
598 10
|
SQL 分布式计算 数据处理
云产品评测|分布式Python计算服务MaxFrame | 在本地环境中使用MaxFrame + 基于MaxFrame实现大语言模型数据处理
本文基于官方文档,介绍了由浅入深的两个部分实操测试,包括在本地环境中使用MaxFrame & 基于MaxFrame实现大语言模型数据处理,对步骤有详细说明。体验下来对MaxCompute的感受是很不错的,值得尝试并使用!
317 1
|
Shell 程序员 开发者
轻松搞定在Python中构建虚拟环境
本教程教你如何使用业界公认的最佳实践,创建一个完全工作的Python开发环境。虚拟环境通过隔离依赖项,避免项目间的冲突,并允许你轻松管理包版本。我们将使用Python 3的内置`venv`模块来创建和激活虚拟环境,确保不同项目能独立运行,不会相互干扰。此外,还将介绍如何检查Python版本、激活和停用虚拟环境,以及使用`requirements.txt`文件共享依赖项。 通过本教程,你将学会: - 创建和管理虚拟环境 - 避免依赖性冲突 - 部署Python应用到服务器 适合新手和希望提升开发环境管理能力的开发者。
896 2
|
Python
探索Python虚拟环境:virtualenv、venv与pipenv比较
在Python开发中,有效的环境管理至关重要。virtualenv、venv和pipenv是常用的虚拟环境管理工具。virtualenv支持Python 2.7+和3.3+,可创建独立环境;venv为Python 3.3+内置库,简单轻量但功能有限;pipenv则结合了包管理和虚拟环境管理,生成Pipfile.lock确保依赖确定性和安全性,推荐作为首选工具。
487 2
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
297 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈

推荐镜像

更多