├── .gitignore ├── .idea ├── copyright │ └── profiles_settings.xml ├── dbnavigator.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml └── runConfigurations.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── libs │ ├── arm64-v8a │ │ ├── libopencv_java3.so │ │ └── libtestopencv.so │ ├── armeabi-v7a │ │ ├── libopencv_java3.so │ │ └── libtestopencv.so │ ├── armeabi │ │ ├── libopencv_java3.so │ │ └── libtestopencv.so │ ├── mips │ │ ├── libopencv_java3.so │ │ └── libtestopencv.so │ └── mips64 │ │ ├── libopencv_java3.so │ │ └── libtestopencv.so └── src │ ├── androidTest │ └── java │ │ └── cn │ │ └── linjk │ │ └── opencvtest │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── cn │ │ │ └── linjk │ │ │ ├── jniBridge │ │ │ └── OpenCVUtils.java │ │ │ └── opencvtest │ │ │ └── MainActivity.java │ ├── jni │ │ ├── Android.mk │ │ ├── Application.mk │ │ ├── cn_linjk_jniBridge_OpenCVUtils.cpp │ │ └── cn_linjk_jniBridge_OpenCVUtils.h │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── cn │ └── linjk │ └── opencvtest │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | build/ 8 | app/build 9 | /captures 10 | .externalNativeBuild 11 | native/ 12 | app/src/main/libs 13 | app/src/main/obj 14 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/dbnavigator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | 26 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 53 | 54 | 55 | 56 | 57 | 1.8 58 | 59 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | OpenCV在Android平台测试例子 2 | 3 | 注意: 4 | 因为opencv的naitive库比较大,有300MB,因此在.gitignore忽略掉这个目录的内容,在使用这个工程时,应该下载opencv的sdk开发包并复制native目录到这个目录下,这样才能编译通过。 5 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.0" 6 | defaultConfig { 7 | applicationId "cn.linjk.opencvtest" 8 | minSdkVersion 18 9 | targetSdkVersion 25 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | 21 | sourceSets{ 22 | main{ 23 | jni.srcDirs = [] 24 | jniLibs.srcDirs = ['libs'] 25 | } 26 | } 27 | } 28 | 29 | dependencies { 30 | compile fileTree(dir: 'libs', include: ['*.jar']) 31 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 32 | exclude group: 'com.android.support', module: 'support-annotations' 33 | }) 34 | compile 'com.android.support:appcompat-v7:25.0.1' 35 | testCompile 'junit:junit:4.12' 36 | } 37 | 38 | task cv_ndkBuild(type: Exec, 39 | group: 'NDK Build', 40 | description: 'Compile JNI source file with NDK') { 41 | 42 | Properties properties = new Properties() 43 | properties.load(project.rootProject.file('local.properties').newDataInputStream()) 44 | def ndkDir = properties.getProperty('ndk.dir') 45 | 46 | commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath 47 | 48 | } -------------------------------------------------------------------------------- /app/libs/arm64-v8a/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/arm64-v8a/libopencv_java3.so -------------------------------------------------------------------------------- /app/libs/arm64-v8a/libtestopencv.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/arm64-v8a/libtestopencv.so -------------------------------------------------------------------------------- /app/libs/armeabi-v7a/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/armeabi-v7a/libopencv_java3.so -------------------------------------------------------------------------------- /app/libs/armeabi-v7a/libtestopencv.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/armeabi-v7a/libtestopencv.so -------------------------------------------------------------------------------- /app/libs/armeabi/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/armeabi/libopencv_java3.so -------------------------------------------------------------------------------- /app/libs/armeabi/libtestopencv.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/armeabi/libtestopencv.so -------------------------------------------------------------------------------- /app/libs/mips/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/mips/libopencv_java3.so -------------------------------------------------------------------------------- /app/libs/mips/libtestopencv.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/mips/libtestopencv.so -------------------------------------------------------------------------------- /app/libs/mips64/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/mips64/libopencv_java3.so -------------------------------------------------------------------------------- /app/libs/mips64/libtestopencv.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linjk/TestOpenCV/dd01a93bb6fce8eca89bee1fcae6bd857968673e/app/libs/mips64/libtestopencv.so -------------------------------------------------------------------------------- /app/src/androidTest/java/cn/linjk/opencvtest/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package cn.linjk.opencvtest; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("cn.linjk.opencvtest", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/java/cn/linjk/jniBridge/OpenCVUtils.java: -------------------------------------------------------------------------------- 1 | package cn.linjk.jniBridge; 2 | 3 | /** 4 | * Created by LinJK on 21/11/2016. 5 | */ 6 | 7 | public class OpenCVUtils { 8 | 9 | static { 10 | System.loadLibrary("testopencv"); 11 | } 12 | 13 | public static native void img2gray(String imgPath); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/cn/linjk/opencvtest/MainActivity.java: -------------------------------------------------------------------------------- 1 | package cn.linjk.opencvtest; 2 | 3 | import android.content.Intent; 4 | import android.graphics.Bitmap; 5 | import android.graphics.BitmapFactory; 6 | import android.net.Uri; 7 | import android.os.Environment; 8 | import android.provider.MediaStore; 9 | import android.support.v7.app.AppCompatActivity; 10 | import android.os.Bundle; 11 | import android.view.Display; 12 | import android.view.View; 13 | import android.widget.Button; 14 | import android.widget.ImageView; 15 | 16 | import java.io.File; 17 | import java.io.FileNotFoundException; 18 | import java.io.FileOutputStream; 19 | import java.io.IOException; 20 | 21 | import cn.linjk.jniBridge.OpenCVUtils; 22 | 23 | public class MainActivity extends AppCompatActivity { 24 | 25 | private Button btnOpenCamera; 26 | private ImageView ivImgOutput; 27 | private Button btnImgGray; 28 | 29 | private String imageFilePath; 30 | 31 | private static final int CAMERA_RESULT = 1112; 32 | 33 | @Override 34 | protected void onCreate(Bundle savedInstanceState) { 35 | super.onCreate(savedInstanceState); 36 | setContentView(R.layout.activity_main); 37 | 38 | btnOpenCamera = (Button)findViewById(R.id.btn_open_camera); 39 | btnOpenCamera.setOnClickListener(new View.OnClickListener() { 40 | @Override 41 | public void onClick(View pView) { 42 | openCamera(); 43 | } 44 | }); 45 | 46 | ivImgOutput = (ImageView)findViewById(R.id.img_output); 47 | 48 | btnImgGray = (Button)findViewById(R.id.img_gray); 49 | btnImgGray.setOnClickListener(new View.OnClickListener() { 50 | @Override 51 | public void onClick(View pView) { 52 | OpenCVUtils.img2gray(imageFilePath); 53 | // 54 | BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); 55 | bmpFactoryOptions.inJustDecodeBounds = true; 56 | Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions); 57 | 58 | bmpFactoryOptions.inSampleSize = calculateInSampleSize(bmpFactoryOptions, 1280, 800); 59 | 60 | bmpFactoryOptions.inJustDecodeBounds = false; 61 | 62 | bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions); 63 | 64 | ivImgOutput.setImageBitmap(bmp); 65 | } 66 | }); 67 | } 68 | 69 | @Override 70 | protected void onActivityResult(int requestCode, int resultCode, Intent data) { 71 | super.onActivityResult(requestCode, resultCode, data); 72 | 73 | if (resultCode == RESULT_OK) { 74 | BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); 75 | bmpFactoryOptions.inJustDecodeBounds = true; 76 | Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions); 77 | 78 | bmpFactoryOptions.inSampleSize = calculateInSampleSize(bmpFactoryOptions, 1280, 800); 79 | 80 | bmpFactoryOptions.inJustDecodeBounds = false; 81 | 82 | bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions); 83 | 84 | ivImgOutput.setImageBitmap(bmp); 85 | 86 | saveBitmap(bmp); 87 | } 88 | } 89 | 90 | private void openCamera() { 91 | imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/testImage.jpg"; 92 | File imageFile = new File(imageFilePath); 93 | Uri imageFileUri = Uri.fromFile(imageFile); 94 | 95 | Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 96 | i.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri); 97 | startActivityForResult(i, CAMERA_RESULT); 98 | } 99 | 100 | private int calculateInSampleSize(BitmapFactory.Options options, 101 | int reqWidth, int reqHeight) { 102 | 103 | final int height = options.outHeight; 104 | final int width = options.outWidth; 105 | int inSampleSize = 1; 106 | 107 | if (height > reqHeight || width > reqWidth) { 108 | 109 | final int heightRatio = Math.round((float) height 110 | / (float) reqHeight); 111 | final int widthRatio = Math.round((float) width / (float) reqWidth); 112 | 113 | inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio; 114 | } 115 | 116 | return inSampleSize; 117 | } 118 | 119 | private void saveBitmap(Bitmap bm) { 120 | File f = new File(imageFilePath); 121 | if (f.exists()) { 122 | f.delete(); 123 | } 124 | try { 125 | FileOutputStream out = new FileOutputStream(f); 126 | bm.compress(Bitmap.CompressFormat.PNG, 90, out); 127 | out.flush(); 128 | out.close(); 129 | } 130 | catch (FileNotFoundException e) { 131 | e.printStackTrace(); 132 | } 133 | catch (IOException e) { 134 | e.printStackTrace(); 135 | } 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /app/src/main/jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | 5 | OpenCV_INSTALL_MODULES := on 6 | OpenCV_CAMERA_MODULES := off 7 | 8 | OPENCV_LIB_TYPE := SHARED 9 | 10 | ifeq ("$(wildcard $(OPENCV_MK_PATH))","") 11 | include ../../../../native/jni/OpenCV.mk 12 | else 13 | include $(OPENCV_MK_PATH) 14 | endif 15 | 16 | LOCAL_MODULE := testopencv 17 | 18 | LOCAL_SRC_FILES := cn_linjk_jniBridge_OpenCVUtils.cpp 19 | 20 | LOCAL_LDLIBS += -lm -llog -landroid 21 | 22 | include $(BUILD_SHARED_LIBRARY) -------------------------------------------------------------------------------- /app/src/main/jni/Application.mk: -------------------------------------------------------------------------------- 1 | APP_STL := gnustl_static 2 | APP_CPPFLAGS := -frtti -fexceptions 3 | APP_ABI := arm64-v8a armeabi armeabi-v7a mips mips64 -------------------------------------------------------------------------------- /app/src/main/jni/cn_linjk_jniBridge_OpenCVUtils.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by LinJK on 21/11/2016. 3 | // 4 | 5 | #include "cn_linjk_jniBridge_OpenCVUtils.h" 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #define TAG "cn.linjk.opencvtest.jni" 16 | #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) 17 | #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) 18 | #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__) 19 | #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__) 20 | #define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__) 21 | 22 | using namespace std; 23 | using namespace cv; 24 | 25 | class ImageUtils{ 26 | public: 27 | void imageToGray(Mat inputImg, string outFilePath); 28 | }; 29 | 30 | void ImageUtils::imageToGray(Mat inputImg, string outFilePath) { 31 | Mat gray; 32 | 33 | Mat input = inputImg.clone(); 34 | 35 | cvtColor(input, gray, COLOR_BGR2GRAY); 36 | 37 | imwrite(outFilePath, gray); 38 | } 39 | 40 | extern "C" { 41 | 42 | JNIEXPORT void JNICALL Java_cn_linjk_jniBridge_OpenCVUtils_img2gray 43 | (JNIEnv *env , jclass objClass, jstring imgFilePath) { 44 | 45 | LOGI("OpenCV version: %s", CV_VERSION); 46 | 47 | char buf[128]; 48 | const char *str = env->GetStringUTFChars(imgFilePath, 0); 49 | LOGD("图像路径: %s", str); 50 | 51 | Mat img = imread(str); 52 | if (!img.data) { 53 | LOGE("-----CV: 读取相片数据出错"); 54 | } 55 | else { 56 | LOGD("-----CV: 读取相片数据成功"); 57 | ImageUtils().imageToGray(img, str); 58 | } 59 | } 60 | 61 | } 62 | 63 | -------------------------------------------------------------------------------- /app/src/main/jni/cn_linjk_jniBridge_OpenCVUtils.h: -------------------------------------------------------------------------------- 1 | /* DO NOT EDIT THIS FILE - it is machine generated */ 2 | #include 3 | /* Header for class cn_linjk_jniBridge_OpenCVUtils */ 4 | 5 | #ifndef _Included_cn_linjk_jniBridge_OpenCVUtils 6 | #define _Included_cn_linjk_jniBridge_OpenCVUtils 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | /* 11 | * Class: cn_linjk_jniBridge_OpenCVUtils 12 | * Method: img2gray 13 | * Signature: (Ljava/lang/String;)V 14 | */ 15 | JNIEXPORT void JNICALL Java_cn_linjk_jniBridge_OpenCVUtils_img2gray 16 | (JNIEnv *, jclass, jstring); 17 | 18 | #ifdef __cplusplus 19 | } 20 | #endif 21 | #endif 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 |