新建android项目
在AndroidManifest.xml中增加写sd卡的权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
下载opencv_android压缩包,地址http://download.youkuaiyun.com/detail/zhangamxqun/7902803
解压压缩包 opencv231_Android.rar
拷贝openvc-2.3.1.jar和两个文件夹armeabi和armeabi-v7a到你的android项目的libs目录下
在oncreate中添加如下代码
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
private ImageView imageView = null;
@Overrideprotected
void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.imageView1);//主界面上的ImageView资源
Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
double scale = 0.1;
imageView.setImageBitmap(bm1);
Mat img = Highgui.imread("/sdcard/test.png", 0);
org.opencv.core.Size dSize = new org.opencv.core.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, 122, 252);
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(this, "写入失败!!", 3).show();
}
}
最后添加一个按钮,实现把一张彩色图(sd卡上的一张测试图片)转为灰度图显示:
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Bitmap bmp = BitmapFactory.decodeFile("/sdcard/test.png");
Mat grayMat = new Mat();
Mat rgbMat = Utils.bitmapToMat(bmp);
Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_BGRA2GRAY, 4);
Imgproc.cvtColor(grayMat, rgbMat, Imgproc.COLOR_GRAY2RGBA, 4);
grayBitmap = Bitmap.createBitmap(rgbMat.cols(), rgbMat.rows(), Config.ARGB_8888); //Config.RGB_565
//将矩阵grayMat转换为灰度图像
Utils.matToBitmap(rgbMat, grayBitmap);
imageView.setImageBitmap(grayBitmap);
}