談?wù)勀銓W(wǎng)站建設(shè)有什么樣好的建設(shè)意見做一個簡單的網(wǎng)站需要多少錢
做視頻圖像處理時需要對其進(jìn)行水印的添加,放在應(yīng)用層調(diào)用工具性能方面不太滿意,于是當(dāng)下采用opencv+libyuv方法進(jìn)行處理。
對于Android的jni開發(fā)不是很懂,我的需求是導(dǎo)入opencv方便在cpp中調(diào)用,但目前找到的教程都是把opencv作為模塊進(jìn)行導(dǎo)入,在java層查看。
摸索了一段時間終于搞完了!
1.下載對應(yīng)的openCV包(我目前版本為4.10.0)
opencv下載
解壓得到:
2.AS中進(jìn)行配置
2.1.把opencv的include文件夾復(fù)制到cpp目錄下
2.2.把opencv的libs放置到與cpp目錄同級的的jniLibs目錄下
按需選擇,我項目只需要前兩個
項目結(jié)構(gòu)如下:
3.對build.gradle(:模塊名)內(nèi)容進(jìn)行修改
android {defaultConfig {externalNativeBuild {cmake {cppFlags ''arguments "-DANDROID_STL=c++_shared"}}ndk {abiFilters 'arm64-v8a','armeabi-v7a'}}externalNativeBuild {cmake {path file('src/main/cpp/CMakeLists.txt')version '3.22.1'}}sourceSets {main {jniLibs.srcDirs = ['src/main/jniLibs'] //指定庫的位置}}
}
4.對CMakeLists.txt進(jìn)行修改
# 設(shè)置 OpenCV 的頭文件路徑
include_directories(${CMAKE_SOURCE_DIR}/cpp/include)# 設(shè)置庫的路徑 采用文件的絕對路徑 libyuv和opencv在同一層
set(OpenCV_LIBS_DIR "E:/AndroidProject/Demo/app/src/main/jniLibs/${ANDROID_ABI}")# 導(dǎo)入 OpenCV 的共享庫
add_library(opencv_java4 SHARED IMPORTED)
set_target_properties(opencv_java4 PROPERTIES IMPORTED_LOCATION${OpenCV_LIBS_DIR}/libopencv_java4.so# 設(shè)置頭文件
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)target_link_libraries(${CMAKE_PROJECT_NAME}androidopencv_java4 #鏈接聲明log)
測試cpp中是否可用opencv
導(dǎo)入頭文件即可:#include “opencv2/opencv.hpp”
沒有報錯即可正常使用,如果提示找不到opencv.hpp,則查看CMakeLists.txt中的路徑是否正確
libyuv導(dǎo)入同理,用的現(xiàn)成編譯好的so庫和頭文件
libyuv
下載解壓后得到:
頭文件在jni/include,庫在libs
最后,完整的CMakeLists.txt如下
cmake_minimum_required(VERSION 3.22.1)project("dvr")set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")# 設(shè)置 OpenCV 的頭文件路徑
include_directories(${CMAKE_SOURCE_DIR}/cpp/include)
# 導(dǎo)入 OpenCV 的共享庫
set(OpenCV_LIBS_DIR "E:/AndroidProject/Demo/app/src/main/jniLibs/${ANDROID_ABI}")
add_library(opencv_java4 SHARED IMPORTED)
set_target_properties(opencv_java4 PROPERTIES IMPORTED_LOCATION${OpenCV_LIBS_DIR}/libopencv_java4.so)# libyuv
add_library(yuv SHARED IMPORTED)
set_target_properties(yuv PROPERTIES IMPORTED_LOCATION${OpenCV_LIBS_DIR}/libyuv.so)add_library(${CMAKE_PROJECT_NAME} SHAREDdvr.cpp)target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(${CMAKE_PROJECT_NAME}androidopencv_java4yuvlog)
圖像處理什么的,opencv這些都導(dǎo)入成功了,自然也就簡單了