Android Jni 利用OpenCV 实现图像尺寸缩放(三)
2017-11-20 14:59
567 查看
一,利用OpenCV的pyrDown() 实现图像缩小,上java代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
}
二,实现jni方法
extern “C”
JNIEXPORT jintArray JNICALL
Java_com_example_dgxq008_opencv_1readpixel_MainActivity_grayProc(JNIEnv *env, jclass type
, jintArray pixels_
, jint w
, jint h) {
// Mat out;
// cvtColor(img,out,COLOR_BGRA2RGB);
//
// //对应数据指针
// uchar* ptr = img.data;
//
// int length = w*h;
// int i;
// for (i = 0; i < length ; ++i) {
// ptr[4*i+0] = 0;
// ptr[4*i+1] = 0;
// ptr[4*i+2] = ptr[4*i+2];
// }
//缩小原图的一倍
pyrDown( img, temp, Size( img.cols/2, img.rows/2 ) );
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
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.test3); 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(); w = w/2; h = h/2; 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 out;
// cvtColor(img,out,COLOR_BGRA2RGB);
//
// //对应数据指针
// uchar* ptr = img.data;
//
// int length = w*h;
// int i;
// for (i = 0; i < length ; ++i) {
// ptr[4*i+0] = 0;
// ptr[4*i+1] = 0;
// ptr[4*i+2] = ptr[4*i+2];
// }
Mat temp; //进行向上取样操作 //( InputArray src, OutputArray dst,const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
//缩小原图的一倍
pyrDown( img, temp, Size( img.cols/2, img.rows/2 ) );
//对应数据指针 uchar* ptrTemp = temp.data; int size = w*h/4; jintArray result = env->NewIntArray(size); env->SetIntArrayRegion(result,0,size,(jint*)ptrTemp); env->ReleaseIntArrayElements(pixels_, pixels, 0); return result;
}
相关文章推荐
- Android Jni 利用OpenCV 实现图像尺寸缩放(二)
- Android Jni 利用OpenCV 实现图像尺寸缩放(一)
- Android Jni 利用OpenCV 实现图像任意角度旋转
- Android Jni 利用OpenCV transpose()函数实现图像转置
- Android平台上利用opencv进行图像的缩放
- android.graphics.Camera实现图像的旋转、缩放,配合Matrix...
- OpenCV实现图像缩放
- android.graphics.Camera实现图像的旋转、缩放
- android.graphics.Camera实现图像的旋转、缩放,配合Matrix实现图像的倾斜
- 关于OpenCV中利用函数cvConvert实现图像数据类型转换(8U->16S)
- Android:利用Matrix,实现双手指缩放图片与拖拽图片功能
- 利用OpenCV实现图像纹理特征提取
- opencv缩放图像的实现
- android开发在jni中使用Opencv进行图像处理,环境搭建篇
- 利用Qt与OpenCV简单实现摄像头图像捕捉
- android.graphics.Camera实现图像的旋转、缩放,配合Matrix实现图像的倾斜
- android 利用ImagevView加载本地图片并实现等比缩放
- Qt可显示基本的图像类型,利用QImage、QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放、旋转)。
- Android平台上利用opencv进行图像的边沿检测
- 利用OpenCV实现图像边缘直方图输出