談?wù)勀銓?duì)網(wǎng)站建設(shè)有什么樣好的建設(shè)意見(jiàn)做一個(gè)簡(jiǎn)單的網(wǎng)站需要多少錢(qián)
做視頻圖像處理時(shí)需要對(duì)其進(jìn)行水印的添加,放在應(yīng)用層調(diào)用工具性能方面不太滿意,于是當(dāng)下采用opencv+libyuv方法進(jìn)行處理。
對(duì)于Android的jni開(kāi)發(fā)不是很懂,我的需求是導(dǎo)入opencv方便在cpp中調(diào)用,但目前找到的教程都是把opencv作為模塊進(jìn)行導(dǎo)入,在java層查看。
摸索了一段時(shí)間終于搞完了!
1.下載對(duì)應(yīng)的openCV包(我目前版本為4.10.0)
opencv下載
解壓得到:
2.AS中進(jìn)行配置
2.1.把opencv的include文件夾復(fù)制到cpp目錄下
2.2.把opencv的libs放置到與cpp目錄同級(jí)的的jniLibs目錄下
按需選擇,我項(xiàng)目只需要前兩個(gè)
項(xiàng)目結(jié)構(gòu)如下:
3.對(duì)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'] //指定庫(kù)的位置}}
}
4.對(duì)CMakeLists.txt進(jìn)行修改
# 設(shè)置 OpenCV 的頭文件路徑
include_directories(${CMAKE_SOURCE_DIR}/cpp/include)# 設(shè)置庫(kù)的路徑 采用文件的絕對(duì)路徑 libyuv和opencv在同一層
set(OpenCV_LIBS_DIR "E:/AndroidProject/Demo/app/src/main/jniLibs/${ANDROID_ABI}")# 導(dǎo)入 OpenCV 的共享庫(kù)
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)
測(cè)試cpp中是否可用opencv
導(dǎo)入頭文件即可:#include “opencv2/opencv.hpp”
沒(méi)有報(bào)錯(cuò)即可正常使用,如果提示找不到opencv.hpp,則查看CMakeLists.txt中的路徑是否正確
libyuv導(dǎo)入同理,用的現(xiàn)成編譯好的so庫(kù)和頭文件
libyuv
下載解壓后得到:
頭文件在jni/include,庫(kù)在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 的共享庫(kù)
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)入成功了,自然也就簡(jiǎn)單了