版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android中引入OpenCV
本篇文章為大家展示了如何在Android中引入OpenCV,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。首先,找到或新建jniLibs文件夾,然后將依賴的動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)(路徑為OpenCV-android-sdk\sdk\native\libs)拷貝到\src\main\jniLibs下面。然后,找到cpp文件夾。將include文件夾(路徑OpenCV-android-sdk\sdk\native\jni\include)拷貝到cpp(路徑\app\src\main\cpp)文件夾里。接著,我們需要引入c++的相關(guān)支持。在module的build.gradle里面加入:externalNativeBuild
{
cmake
{
//arguments
'-DANDROID_TOOLCHAIN=clang',
'-DANDROID_STL=gnustl_static'
cppFlags
"-std=c++11","-frtti",
"-fexceptions"
}
}
ndk{
abiFilters
'armeabi-v7a'
}最后,我們需要在CMakeLists.txt中,加入opencv相關(guān)的聲明。由于配置比較復(fù)雜,在此直接將demo的CMakeLists.txt的內(nèi)容貼到這里。#
For
more
information
about
using
CMake
with
Android
Studio,
read
the
#
documentation:
/studio/projects/add-native-code.html
#
Sets
the
minimum
version
of
CMake
required
to
build
the
native
library.
cmake_minimum_required(VERSION
3.4.1)
#
Creates
and
names
a
library,
sets
it
as
either
STATIC
#
or
SHARED,
and
provides
the
relative
paths
to
its
source
code.
#
You
can
define
multiple
libraries,
and
CMake
builds
them
for
you.
#
Gradle
automatically
packages
shared
libraries
with
your
APK.
set(CMAKE_VERBOSE_MAKEFILE
on)
set(libs
"${CMAKE_SOURCE_DIR}/src/main/jniLibs")
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/include)
add_library(libopencv_java3
SHARED
IMPORTED
)
set_target_properties(libopencv_java3
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_java3.so")
add_library(libopencv_calib3d
STATIC
IMPORTED
)
set_target_properties(libopencv_calib3d
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_calib3d.a")
add_library(libopencv_core
STATIC
IMPORTED
)
set_target_properties(libopencv_core
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_core.a")
add_library(libopencv_features2d
STATIC
IMPORTED
)
set_target_properties(libopencv_features2d
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_features2d.a")
add_library(libopencv_flann
STATIC
IMPORTED
)
set_target_properties(libopencv_flann
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_flann.a")
add_library(libopencv_highgui
STATIC
IMPORTED
)
set_target_properties(libopencv_highgui
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_highgui.a")
add_library(libopencv_imgcodecs
STATIC
IMPORTED
)
set_target_properties(libopencv_imgcodecs
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_imgcodecs.a")
add_library(libopencv_imgproc
STATIC
IMPORTED
)
set_target_properties(libopencv_imgproc
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_imgproc.a")
add_library(libopencv_ml
STATIC
IMPORTED
)
set_target_properties(libopencv_ml
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_ml.a")
add_library(libopencv_objdetect
STATIC
IMPORTED
)
set_target_properties(libopencv_objdetect
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_objdetect.a")
add_library(libopencv_photo
STATIC
IMPORTED
)
set_target_properties(libopencv_photo
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_photo.a")
add_library(libopencv_shape
STATIC
IMPORTED
)
set_target_properties(libopencv_shape
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_shape.a")
add_library(libopencv_stitching
STATIC
IMPORTED
)
set_target_properties(libopencv_stitching
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_stitching.a")
add_library(libopencv_superres
STATIC
IMPORTED
)
set_target_properties(libopencv_superres
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_superres.a")
add_library(libopencv_video
STATIC
IMPORTED
)
set_target_properties(libopencv_video
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_video.a")
add_library(libopencv_videoio
STATIC
IMPORTED
)
set_target_properties(libopencv_videoio
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_videoio.a")
add_library(libopencv_videostab
STATIC
IMPORTED
)
set_target_properties(libopencv_videostab
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_videostab.a")
add_library(libopencv_ts
STATIC
IMPORTED
)
set_target_properties(libopencv_ts
PROPERTIES
IMPORTED_LOCATION
"${libs}/${ANDROID_ABI}/libopencv_ts.a")
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS}
-std=gnu++11
-fexceptions
-frtti")
#include_directories(D:/Projects/Android/CLMAndroid/OpenCV-android-sdk/sdk/native/jni/include
)
#set(OpenCV_DIR
D:/Projects/Android/CLMAndroid/OpenCV-android-sdk/sdk/native/jni)
#find_package(OpenCV
REQUIRED)
#target_link_libraries(${OpenCV_LIBS})
add_library(
#
Sets
the
name
of
the
library.
native-lib
#
Sets
the
library
as
a
shared
library.
SHARED
#
Provides
a
relative
path
to
your
source
file(s).
src/main/cpp/native-lib.cpp
)
#
Searches
for
a
specified
prebuilt
library
and
stores
the
path
as
a
#
variable.
Because
CMake
includes
system
libraries
in
the
search
path
by
#
default,
you
only
need
to
specify
the
name
of
the
public
NDK
library
#
you
want
to
add.
CMake
verifies
that
the
library
exists
before
#
completing
its
build.
find_library(
#
Sets
the
name
of
the
path
variable.
log-lib
#
Specifies
the
name
of
the
NDK
library
that
#
you
want
CMake
to
locate.
log
)
#
Specifies
libraries
CMake
should
link
to
your
target
library.
You
#
can
link
multiple
libraries,
such
as
libraries
you
define
in
this
#
build
script,
prebuilt
third-party
libraries,
or
system
libraries.
target_link_libraries(
#
Specifies
the
target
library.
native-lib
android
log
libopencv_java3
libopencv_calib3d
libopencv_core
libopencv_features2d
libopencv_flann
libopencv_highgui
libopencv_imgcodecs
libopencv_imgproc
libopencv_ml
libopencv_objdetect
libopencv_photo
libopencv_shape
libopencv_stitching
libopencv_superres
libopencv_video
libopencv_videoio
libopencv_videostab
#
Links
the
target
library
to
the
log
library
#
included
in
the
NDK.
${log-lib}
)這樣配置之后,我們就可以在cpp中,直接使用OpenCV庫(kù)了。在此貼一個(gè)簡(jiǎn)單的均值濾波:#include
<jni.h>
#include
<string>
#include
<opencv2/opencv.hpp>
#include
<bits/stdc++.h>
#include
<android/log.h>
#include<opencv2/core/core.hpp>
#include"opencv2/imgproc/imgproc.hpp"
using
namespace
cv;
using
namespace
std;
#define
MAKE_ARGB(a,
r,
g,
b)
((a&0xff)<<24)
|
((r&0xff)<<16)
|
((g&0xff)<<8)
|
(b&0xff)
#define
MAKE_RGB565(r,
g,
b)
((((r)
>>
3)
<<
11)
|
(((g)
>>
2)
<<
5)
|
((b)
>>
3))
extern
"C"
{
JNIEXPORT
jintArray
JNICALL
Java_com_live_longsiyang_opencvdemo_OpenCVNativeManager_getBlurImage(JNIEnv
*env,
jobject
thiz,
jintArray
pixels_,
jint
w,
jint
h)
{
int
colorType
=
CV_8UC4;
jint
*pixels
=
env->GetIntArrayElements(pixels_,
NULL);
Mat
imgMat(h,
w,
colorType,
pixels);
Mat
out(h,
w,
colorType);
blur(imgMat,
out,
Size(20,
20));
env->ReleaseIntArrayElements(pixels_,
pixels,
0);
int
*outIntImage
=
new
int[w
*
h];
for
(int
i
=
0;
i
<
w
*
h;
i++)
{
int
a,
r,
g,
b;
for
(int
j
=
0;
j
<
4;
j++)
{
a
=
out.data[i
*
4
+
3];
r
=
out.data[i
*
4
+
2];
g
=
out.data[i
*
4
+
1];
b
=
out.data[i
*
4
+
0];
outIntImage[i]
=
(int)
out.data[i
*
4
+
j];
}
outIntImage[i]
=
MAKE_ARGB(a,r,g,b);
}
jintArray
result
=
env->NewIntArray(w
*
h);
env->SetIntArrayRegion(result,
0,
w
*
h,
outIntImage);
return
result;
}
}這樣我們就能看到一個(gè)基本的模糊效果的demo。import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.util.Log;
import
android.view.View;
import
android.widget.Button;
import
android.widget.ImageView;
import
android.widget.TextView;
public
class
MainActivity
extends
AppCompatActivity
{
static
{
System.loadLibrary("native-lib");
}
ImageView
mIvTest;
Button
mBtnTest;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mIvTest
=
(ImageView)
findViewById(R.id.img_test);
mIvTest.setImageResource(R.drawable.beauty_steward_course_video_thumb_icon);
mBtnTest
=
(Button)
findViewById(R.id.btn_test);
mBtnTest.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
Bitmap
srcBitmap
=
BitmapFactory.decodeResource(getResources(),
R.drawable.beauty_steward_course_video_thumb_icon);
int
w
=
srcBitmap.ge
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 以不走尋常路為話題的議論文
- 公司增資擴(kuò)股說明書范文
- 肉類產(chǎn)品市場(chǎng)定位與目標(biāo)客戶分析考核試卷
- 食品營(yíng)養(yǎng)與健康知識(shí)考核試卷
- 陶瓷工藝品的環(huán)保教育與傳播策略考核試卷
- 鐵路設(shè)備涂裝工藝研究考核試卷
- 有線電視傳輸網(wǎng)絡(luò)故障案例分析考核試卷
- 修繕工程方案編制依據(jù)
- 臨床醫(yī)師合理用血評(píng)價(jià)考核及血血權(quán)限制度
- 獸醫(yī)用氨基酸制劑項(xiàng)目可行性實(shí)施報(bào)告
- 2023年事業(yè)單位法人年檢自查工作報(bào)告
- 幼兒園優(yōu)質(zhì)公開課:小班語(yǔ)言《小老鼠旅行》課件
- 多彩的情緒世界教學(xué)課件(小學(xué)生心理健康課)
- 安防工程施工組織方案
- 中華人民共和國(guó)企業(yè)所得稅年度納稅申報(bào)表(A類)
- 高一職高期中考試數(shù)學(xué)試題(2份)
- 高職院校“氫能技術(shù)應(yīng)用”專業(yè)建設(shè)探討
- GB/T 17410-2023有機(jī)熱載體爐
- 部編版五年級(jí)語(yǔ)文上冊(cè)第15課《小島》優(yōu)質(zhì)課件
- 廢礦物油資源綜合利用項(xiàng)目可行性研究報(bào)告
- 二重管高壓旋噴樁施工工法
評(píng)論
0/150
提交評(píng)論