欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何在Android中引入OpenCV

本篇文章為大家展示了如何在Android中引入OpenCV,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是一家網(wǎng)站建設(shè)、做網(wǎng)站,提供網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,網(wǎng)站制作,建網(wǎng)站,按需定制,網(wǎng)站開發(fā)公司,從2013年成立是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價值為核心業(yè)務(wù),全程參與項目的網(wǎng)站策劃設(shè)計制作,前端開發(fā),后臺程序制作以及后期項目運營并提出專業(yè)建議和思路。

首先,找到或新建jniLibs文件夾,然后將依賴的動態(tài)庫和靜態(tài)庫(路徑為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: 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.

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庫了。在此貼一個簡單的均值濾波:

#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;  
  }
}

這樣我們就能看到一個基本的模糊效果的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.getWidth();
        int h = srcBitmap.getHeight();
        int[] pixels = new int[w*h];
        srcBitmap.getPixels(pixels,0,w,0,0,w,h);
        int[] outPixels = OpenCVNativeManager.getBlurImage(pixels ,w,h);
        Bitmap destBitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888);
        destBitmap.setPixels(outPixels,0,w,0,0,w,h);
        mIvTest.setImageBitmap(destBitmap);

      }
    });
    findViewById(R.id.btn_reset).setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        mIvTest.setImageResource(R.drawable.beauty_steward_course_video_thumb_icon);
      }
    });
  }
}

如何在Android中引入OpenCV

導(dǎo)出.so

如何在Android中引入OpenCV

在build中找到這個so,這就是我們需要的文件。此外,由于我們使用了opencv相關(guān)的庫,我們還需要將opencv的相關(guān)文件復(fù)制出來。將其導(dǎo)入我們需要的工程。

如何在Android中引入OpenCV

導(dǎo)入之后,我們只需要在module的build.gradle里面加入:

android {
  ...

  sourceSets {
    main {
      jniLibs.srcDirs = ['src/main/jniLibs']
      aidl.srcDirs = ['src/main/aidl']
    }
  }
}

之后,我們就可以直接調(diào)用

System.loadLibrary("native-lib");

上述內(nèi)容就是如何在Android中引入OpenCV,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標題:如何在Android中引入OpenCV
文章起源:http://aaarwkj.com/article34/jesdpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、品牌網(wǎng)站設(shè)計、App設(shè)計、云服務(wù)器、商城網(wǎng)站、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
欧美亚洲另类国产精品| 精品亚洲第一区二区免费在线| 中文字幕久久亚洲一区| 国产精品美女丝袜久久久| 欧美日韩视频在线第一页| 亚洲熟妇精品一区二区三区| 国产一区二区三区在线精品专区| 国产精品传媒在线观看网站| 蜜臀av一区二区高清| 淫色网av人妻中文字幕| 日韩女同一区二区三区在线观看| 三级黄色片免费久久久| 国产欧美日韩经典一区| 欧美日在线观看加勒比| 亚洲av粉色一区二区三区| 成人精品午夜福利视频| 日本福利影院在线观看| 精品啪在线观看国产熟女| 久久精品国产亚洲av波多| 麻豆文化传媒免费网址| 国产区二区三区在线视频| 亚洲大尺码在线视频香蕉| 午夜视频免费在线观看| 熟女俱乐部五十路六十路| av黄色天堂在线观看| 国产精品人一区二区三区| 久久国产精品午夜亚洲欧美| 色呦呦中文字幕在线播放| 亚洲av日韩综合一区尤物| 精品视频一区二区三区在线观看| 日本一区二区三区不卡在线| 又黄又湿又刺激中文字幕| 欧美精品亚洲精品国产| 91熟女成人精品一区二区| 国产经典三级在线观看| 日韩亚洲一区二区免费| 成人免费在线观看午夜| 国产美女亚洲精品久久久| 日本三本道成人免费毛片| 福利一区二区在线视频| 97日韩在线免费视频网站|