日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

基于Android studio3.6的JNI教程之opencv實例詳解

瀏覽:130日期:2022-09-26 16:01:13

基本環境:

Android studio3.6

NDK:r14b(盡量使用該版本)

Opencv3.4.1 android sdk

基于Android studio3.6的JNI教程之opencv實例詳解

(1)新建工程OpenCVDemo,選擇,一定要選擇Native c++類型,最后要選c++14支持。

(2)File->Project Structure->SDK Location,設置這3個路徑,NDK選擇r14b。

(3)任意找一張圖片,復制到res/drawable。

(4)修改布局文件res/layout/ activity_main.xml

<?xml version='1.0' encoding='utf-8'?><RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent'> <ImageView android: android:layout_width='match_parent' android:layout_height='match_parent' /> <LinearLayout android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_alignParentBottom='true' android:orientation='horizontal'> <Button android: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_weight='1' android:text='show' /> <Button android: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_weight='1' android:text='process' /> </LinearLayout></RelativeLayout>

(5)修改java文件,app/src/main/java/ com.example.opencvdemo/ MainActivity

主要修改包括修改

繼承OnClickListener類,

修改onCreate方法

增加c++的接口函數,getEdge

實現點擊按鈕的方法,

整體代碼如下,

(6)Termi

package com.example.opencvdemo;import androidx.appcompat.app.AppCompatActivity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ // Used to load the ’native-lib’ library on application startup. static { System.loadLibrary('native-lib'); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); findViewById(R.id.show).setOnClickListener(this); findViewById(R.id.process).setOnClickListener(this); } /** * A native method that is implemented by the ’native-lib’ native library, * which is packaged with this application. */ //獲得Canny邊緣 public native void getEdge(Object bitmap); private ImageView imageView; @Override public void onClick(View v) { if (v.getId() == R.id.show) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test); imageView.setImageBitmap(bitmap); } else { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test); getEdge(bitmap); imageView.setImageBitmap(bitmap); } }}

nal下進入appsrcmainjava這一層目錄,執行,

javah com.example.opencvdemo.MainActivity

將生成的com_example_opencvdemo_MainActivity.h,剪切到app/src/main/cpp目錄下。

(7)修改app/src/main/cpp下面的native-lib.cpp,主要通過c++實現getEdge方法,主要代碼如下,

#include <jni.h>#include <string>#include 'com_example_opencvdemo_MainActivity.h'#include <android/bitmap.h>#include <opencv2/opencv.hpp>using namespace cv;extern 'C'JNIEXPORT void JNICALLJava_com_example_opencvdemo_MainActivity_getEdge(JNIEnv *env, jobject obj, jobject bitmap){ // TODO: implement getEdge() AndroidBitmapInfo info; void *pixels; CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0); CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 || info.format == ANDROID_BITMAP_FORMAT_RGB_565); CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0); CV_Assert(pixels); if (info.format == ANDROID_BITMAP_FORMAT_RGBA_8888) { Mat temp(info.height, info.width, CV_8UC4, pixels); Mat gray; cvtColor(temp, gray, COLOR_RGBA2GRAY); Canny(gray, gray, 125, 225); cvtColor(gray, temp, COLOR_GRAY2RGBA); } else { Mat temp(info.height, info.width, CV_8UC2, pixels); Mat gray; cvtColor(temp, gray, COLOR_RGB2GRAY); Canny(gray, gray, 125, 225); cvtColor(gray, temp, COLOR_GRAY2RGB); } AndroidBitmap_unlockPixels(env, bitmap);}

(8)修改CMakeLists.txt

包括增加opencv包含路徑,增加opencv鏈接,增加目標庫的鏈接(OpenCV_LIBS和jnigraphics)

全部代碼如下,

# For more information about using CMake with Android Studio, read the# documentation: https://d.android.com/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.#設置OpenCV-android-sdk路徑set( OpenCV_DIR E:/Android/OpenCV-android-sdk/sdk/native/jni )find_package(OpenCV REQUIRED )if(OpenCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) message(STATUS 'OpenCV library status:') message(STATUS ' version: ${OpenCV_VERSION}') message(STATUS ' libraries: ${OpenCV_LIBS}') message(STATUS ' include path: ${OpenCV_INCLUDE_DIRS}')else(OpenCV_FOUND) message(FATAL_ERROR 'OpenCV library not found')endif(OpenCV_FOUND) set(CMAKE_SHARED_LINKER_FLAGS '${CMAKE_SHARED_LINKER_FLAGS} -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a') 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). 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 ${OpenCV_LIBS} jnigraphics # Links the target library to the log library # included in the NDK. ${log-lib} )

(9)修改app/build.gradle

主要增加cmake的cppFlags,arguments

全部代碼如下,

apply plugin: ’com.android.application’android { compileSdkVersion 29 buildToolsVersion '29.0.3' defaultConfig { applicationId 'com.example.opencvdemo' minSdkVersion 16 targetSdkVersion 29 versionCode 1 versionName '1.0' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' externalNativeBuild { cmake { cppFlags '-std=c++14 -frtti -fexceptions' arguments ’-DANDROID_STL=gnustl_shared’ //支持C++異常處理標準模板快,ndk16+需要注釋 //abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64' } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(’proguard-android-optimize.txt’), ’proguard-rules.pro’ } } externalNativeBuild { cmake { path 'src/main/cpp/CMakeLists.txt' version '3.10.2' } }}dependencies { implementation fileTree(dir: ’libs’, include: [’*.jar’]) implementation ’androidx.appcompat:appcompat:1.1.0’ implementation ’androidx.constraintlayout:constraintlayout:1.1.3’ testImplementation ’junit:junit:4.12’ androidTestImplementation ’androidx.test.ext:junit:1.1.1’ androidTestImplementation ’androidx.test.espresso:espresso-core:3.2.0’}

(10)整體目錄結構如下,

基于Android studio3.6的JNI教程之opencv實例詳解

運行程序,

基于Android studio3.6的JNI教程之opencv實例詳解

代碼鏈接:

References:

https://www.jianshu.com/p/6e16c0429044

https://www.bilibili.com/video/av55834524/

總結

到此這篇關于基于Android studio3.6的JNI教程之opencv實例詳解的文章就介紹到這了,更多相關android studio JNI教程opencv內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产精品久久久久久电车 | 日韩精品乱码av一区二区| 99pao成人国产永久免费视频| 五月精品视频| 日日夜夜免费精品| 免费看一区二区三区| 日韩1区在线| 激情久久久久久| 中文字幕日韩高清在线| 欧美日韩网址| 黄色aa久久| 欧洲一区二区三区精品| 国产一区二区高清| 国产欧美在线| 精品丝袜在线| 亚洲影院天堂中文av色| 国产精品亚洲综合在线观看| 福利片在线一区二区| 91精品观看| 91麻豆精品激情在线观看最新| 精品久久国产一区| 在线 亚洲欧美在线综合一区| 日韩精品a在线观看91| 精品国产乱码久久久| 久久精品青草| 午夜一区在线| 国产精选一区| 久久亚洲黄色| 亚洲高清不卡| 国产欧美久久一区二区三区| 国产精品久久久免费| 老色鬼精品视频在线观看播放| 欧美日韩一二三四| 一区二区三区国产在线| 麻豆精品蜜桃视频网站| 亚洲深夜福利| 国产精品亚洲综合色区韩国| 欧美不卡视频| 日韩黄色在线观看| 久久精品99久久无色码中文字幕| 亚洲一区二区毛片| 欧美一级二级视频| 国内精品麻豆美女在线播放视频| 色天使综合视频| 99久久亚洲精品蜜臀| 蜜臀久久久99精品久久久久久| 蜜桃av一区二区三区电影| 日韩激情一区二区| 综合日韩av| 丝袜美腿一区二区三区| 国产精品第十页| 欧洲毛片在线视频免费观看| 视频一区日韩精品| 91嫩草亚洲精品| 欧美一级专区| 国产精品久久777777毛茸茸| 欧美亚洲免费| 99热精品久久| 欧美亚洲福利| 亚洲性视频h| 欧美欧美黄在线二区| 成人片免费看| 亚洲精品成人一区| 日韩一区二区三区免费播放| 综合欧美精品| 色爱综合av| 久久激情五月婷婷| 欧美日韩精品一区二区视频| 欧美日韩国产一区二区在线观看| 成人日韩在线观看| 国产亚洲一卡2卡3卡4卡新区| 国产精品久久久久久久免费软件| 欧美日韩中文一区二区| 国产麻豆一区二区三区| 国产精品美女| 国产精品久久久久久久久久10秀 | 日本va欧美va欧美va精品| 日韩在线精品| 欧美精品中文| 亚洲欧美网站| 日韩精品一区二区三区免费观影 | 99热精品久久| 国产精品欧美在线观看| 亚洲婷婷在线| 久久午夜影院| 青草国产精品久久久久久| 91成人网在线观看| 国产精品久久观看| 欧美日韩伊人| 久久一区二区三区电影| 精品视频在线一区二区在线| 午夜亚洲福利| 香蕉久久国产| 天堂а√在线最新版中文在线| 日韩高清一区在线| 中文一区一区三区免费在线观 | 精品一区二区三区中文字幕| 日本高清久久| 男女精品网站| 欧美91视频| 日韩精品免费一区二区在线观看 | 美国三级日本三级久久99| 久久精品国内一区二区三区水蜜桃| 国产精品2023| 国产精选久久| 国产日韩在线观看视频| 亚洲人成亚洲精品| 蜜臀久久99精品久久一区二区| 日韩精彩视频在线观看| 精品1区2区3区4区| 久久精品青草| 中文在线资源| 韩国久久久久久| 国产在线不卡一区二区三区| 国产精品主播| 国产精品多人| 国产日韩欧美中文在线| 日本少妇一区二区| 日韩国产欧美在线视频| 日韩成人精品一区二区三区| 亚洲伊人精品酒店| 亚洲日韩视频| 日韩久久99| 国产精品美女久久久浪潮软件| 欧美高清一区| 性欧美69xoxoxoxo| 国产精品婷婷| 中文不卡在线| 亚洲精品第一| 青青草伊人久久| 国产欧美综合一区二区三区| 国产精品亚洲综合久久| 久久国产精品美女| 精品午夜av| 日韩一区亚洲二区| 亚洲高清毛片| 美女少妇全过程你懂的久久| 999在线观看精品免费不卡网站| 日韩欧美午夜| 好看不卡的中文字幕| 免费看黄色91| 久久狠狠亚洲综合| 精品久久精品| 午夜av成人| 国产精品美女久久久浪潮软件| 在线看片日韩| 国产精品99久久久久久董美香| 国产精品99一区二区三| 99视频精品视频高清免费| 热三久草你在线| 伊人久久亚洲美女图片| 亚洲色图综合| 麻豆国产精品一区二区三区| 欧美激情福利| 电影天堂国产精品| 亚洲一区av| 国精品产品一区| 影音国产精品| 国产精品www.| 欧美色图国产精品| 日韩精品免费视频人成| 精品视频网站| 亚洲大全视频| 日韩av在线播放中文字幕| 国产精品伦理久久久久久| 国产日韩专区| 麻豆一区二区99久久久久| 亚洲电影有码| 美国av一区二区| 激情不卡一区二区三区视频在线| 激情自拍一区| 国产日韩视频| 蜜桃视频欧美| 国产精品1区| 免播放器亚洲| 国产成人精品福利| 蜜桃视频免费观看一区| 成人高清一区| 亚州av日韩av| 色偷偷偷在线视频播放| 午夜天堂精品久久久久| av高清不卡| 欧美亚洲色图校园春色| 极品日韩av| 伊人www22综合色| 日韩啪啪电影网| 国产精品最新自拍| 久久av一区| 91tv亚洲精品香蕉国产一区| 欧美日一区二区在线观看| 狠狠爱www人成狠狠爱综合网| 国产精品久久久久久久久久白浆| 国产伊人精品| 久久亚洲精品中文字幕| 免费不卡在线视频| 蜜桃精品在线| 欧美精品成人| 蜜桃久久久久久久| 麻豆精品蜜桃| 青青草国产成人99久久|