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

来源:互联网 发布:java达内和黑马哪个好 编辑:程序博客网 时间:2024/06/04 17:53

在Android2.3.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. }  

 

 

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

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

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

 

Xml代码 复制代码 收藏代码
  1. <!-- 在SDCard中创建与删除文件权限 -->  
  2. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  3. <!-- 往SDCard写入数据权限 -->  
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

 

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

原创粉丝点击