作者:星隕
來源:
音視訊開發進階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 版本的。
解壓之後,主要有三個目錄:
apk
、
sdk
samples
,要關心的就是
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參考
http://www.jianshu.com/p/11959977589a 标簽: Opencv「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。
