Android Jni opencv中的重映射:remap()函数
2017-11-20 17:57
405 查看
一,上java代码
二,实现jni方法
extern “C”
JNIEXPORT jintArray JNICALL
Java_com_example_dgxq008_opencv_1readpixel_MainActivity_grayProc(JNIEnv *env, jclass type
, jintArray pixels_
, jint w
, jint h) {
}
private Button btnProc; private ImageView imageView; private Bitmap bmp; // 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); // Example of a call to a native method btnProc = (Button) findViewById(R.id.btn_gray_process); imageView = (ImageView) findViewById(R.id.image_view); bmp = BitmapFactory.decodeResource(getResources(), R.drawable.test7); imageView.setImageBitmap(bmp); btnProc.setOnClickListener(this); } /** * A native method that is implemented by the 'native-lib' native library, * which is packaged with this application. */ public static native int[] grayProc(int[] pixels, int w, int h); @Override public void onClick(View view) { int w = bmp.getWidth(); int h = bmp.getHeight(); int[] pixels = new int[w*h]; bmp.getPixels(pixels, 0, w, 0, 0, w, h); long startTime = System.currentTimeMillis(); int[] resultInt = grayProc(pixels, w, h); long endTime = System.currentTimeMillis(); Log.e("JNITime",""+(endTime-startTime)); Bitmap resultImg = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); //(@ColorInt int[] pixels, int offset, int stride,int x, int y, int width, int height) resultImg.setPixels(resultInt, 0, w, 0, 0, w, h); imageView.setImageBitmap(resultImg); }
二,实现jni方法
extern “C”
JNIEXPORT jintArray JNICALL
Java_com_example_dgxq008_opencv_1readpixel_MainActivity_grayProc(JNIEnv *env, jclass type
, jintArray pixels_
, jint w
, jint h) {
jint* pixels = env->GetIntArrayElements(pixels_, NULL); if (pixels==NULL){ return 0; } //图片一进来时是ARGB 通过mat转换BGRA Mat img(h,w,CV_8UC4,(uchar *)pixels); //pixels 操作的是同一份数据 Mat temp; Mat map_x,map_y; map_x.create(img.size(),CV_32FC1); map_y.create(img.size(),CV_32FC1); for (int i = 0; i <img.rows ; ++i) { for (int j = 0; j < img.cols; ++j) { map_x.at<float>(i,j) = static_cast<float>(i); map_y.at<float>(i,j) = static_cast<float>(img.rows-j); } } //map对应type--》CV_16UC1, CV_32FC1,or none remap(img,img,map_x,map_y,CV_INTER_LINEAR); //对应数据指针 uchar* ptr = img.data; int size = w*h; jintArray result = env->NewIntArray(size); env->SetIntArrayRegion(result,0,size,pixels); env->ReleaseIntArrayElements(pixels_, pixels, 0); return result;
}
相关文章推荐
- Opencv 中重映射的remap函数中map_x,map_y的困惑说明
- opencv重映射remap( )函数
- opencv中的重映射:remap()函数
- Android工程中jni本地调用opencv时,某些函数不识别问题
- OpenCV代码提取:remap函数的实现
- 编译本地jni时替换 __android_log_print 函数
- Android Studio + NDK JNI调用openCV图像处理
- FFmpeg Android 移植,改 main 函数JNI调用
- Android开发:安装NDK,移植OpenCV2.3.1,JNI调用OpenCV全过程
- OpenCV代码提取:remap函数的实现
- Android JNI编程之基础学习(一) 认识c语言的基本类型,输出输入函数
- Android JNI(五)————JNI_JNI函数编码风格(C风格与C++风格)
- 编译代码在Android中使用JNI调用Opencv本地代码 配置方式 边缘检测 范例代码
- cocos2dx3.3 android工程 Jni调用java函数
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
- Android JNI技术 实现自己的JNI_OnLoad函数案列
- 利用OPENCV为android开发畸变校正的JNI库方法
- VR/AR动手玩(三):Android使用jni调用opencv
- Android NDK: WARNING:jni/Android.mk:native_sample: non-system libraries in linker flags: -lopencv_ja