Android平台上利用opencv进行图像的边沿检测

在Android2.3.1模拟器上跑了,如下:

 Android平台上利用opencv进行图像的边沿检测_第1张图片

 

代码如下:

 

Java代码 复制代码  收藏代码
  1. package cn.netjava.opencv;   
  2.   
  3. import java.io.File;   
  4.   
  5. import org.opencv.core.CvType;   
  6. import org.opencv.core.Mat;   
  7. import org.opencv.core.Size;   
  8. import org.opencv.highgui.Highgui;   
  9. import org.opencv.imgproc.Imgproc;   
  10.   
  11.   
  12.   
  13.   
  14. import android.app.Activity;   
  15. import android.graphics.Bitmap;   
  16. import android.graphics.BitmapFactory;   
  17. import android.graphics.drawable.BitmapDrawable;   
  18. import android.net.Uri;   
  19. import android.os.Bundle;   
  20. import android.util.Log;   
  21. import android.view.View;   
  22. import android.widget.Button;   
  23. import android.widget.ImageView;   
  24. import android.widget.Toast;   
  25.   
  26. public class TestOpencv extends Activity {   
  27.   
  28.     private Button deal_button, recall_button;   
  29.     private ImageView imageview;   
  30.   
  31.     /** Called when the activity is first created. */  
  32.     @Override  
  33.     public void onCreate(Bundle savedInstanceState) {   
  34.         super.onCreate(savedInstanceState);   
  35.         setContentView(R.layout.main);   
  36.   
  37.         double scale = 0.1;   
  38.         imageview =  (ImageView)this.findViewById(R.id.imageView1);   
  39.         Bitmap bm1=BitmapFactory.decodeFile("/sdcard/girl.jpg");   
  40.         imageview.setImageBitmap(bm1);   
  41.         Mat img = Highgui.imread("/sdcard/girl.jpg",0);   
  42.            
  43.         Size dsize = new Size(img.width()*scale,img.height()*scale);   
  44.         Mat img2 = new Mat(dsize,CvType.CV_8SC1);   
  45.         Mat img3 = new Mat();   
  46.         img.convertTo(img2, CvType.CV_8SC1);   
  47.         Imgproc.Canny(img, img3, 123250);   
  48.            
  49.         boolean flag=Highgui.imwrite("/sdcard/new.jpg", img3);   
  50.         if(flag)   
  51.         {   
  52.             File f = new File("/sdcard/new.jpg");   
  53.             if(f.exists())   
  54.             {   
  55.                 Bitmap bm=BitmapFactory.decodeFile("/sdcard/new.jpg");   
  56.                 imageview.setImageBitmap(bm);   
  57.             }   
  58.         }//end if   
  59.         else{   
  60.         Toast.makeText(TestOpencv.this"===========图片写入失败!============!!"3).show();   
  61.         }   
  62.     }   
  63. }  
package cn.netjava.opencv;

import java.io.File;

import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;




import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class TestOpencv extends Activity {

	private Button deal_button, recall_button;
	private ImageView imageview;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		double scale = 0.1;
		imageview =  (ImageView)this.findViewById(R.id.imageView1);
		Bitmap bm1=BitmapFactory.decodeFile("/sdcard/girl.jpg");
		imageview.setImageBitmap(bm1);
		Mat img = Highgui.imread("/sdcard/girl.jpg",0);
		
		Size dsize = new Size(img.width()*scale,img.height()*scale);
		Mat img2 = new Mat(dsize,CvType.CV_8SC1);
		Mat img3 = new Mat();
		img.convertTo(img2, CvType.CV_8SC1);
		Imgproc.Canny(img, img3, 123, 250);
		
		boolean flag=Highgui.imwrite("/sdcard/new.jpg", img3);
		if(flag)
		{
			File f = new File("/sdcard/new.jpg");
			if(f.exists())
			{
				Bitmap bm=BitmapFactory.decodeFile("/sdcard/new.jpg");
				imageview.setImageBitmap(bm);
			}
		}//end if
		else{
		Toast.makeText(TestOpencv.this, "===========图片写入失败!============!!", 3).show();
		}
	}
}

 

 

但自己在实践过程中,一个小问题着实费了我一番功夫。

将进行转化的矩阵写到sdcard中,总是写不进去。

弄了很多,多亏一学姐指点,程序对sdcard进行操作时,要在XML文件中进行权限控制。

 

Xml代码 复制代码  收藏代码
  1.   
  2. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  3.   
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

 

 在AndroidManifest.xml中加入上面两行代码一切OK啦~

你可能感兴趣的:(Android平台上利用opencv进行图像的边沿检测)