
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它可以运行在Linux、Windows、Android和Mac OS等操作系统上。OpenCV原本由一系列 C 函数和少量 C++ 类构成,同时提供了Python等其他语言的接口,它实现了图像处理和计算机视觉方面的很多通用算法。下面这个实例演示了使用OpenCV在Android手机以圆形形状抠取图像。
实例功能
此实例主要通过使用Imgproc的circle()方法等,实现抠取圆形图像。当实例运行之后,单击“显示原始图像”按钮,原始图像的效果如图1(a)所示。单击“抠取圆形图像”按钮,抠取的圆形图像效果如图1(b)所示。

■ 图1
实现代码
public void onClickButton2(View v) { //响应单击按钮“抠取圆形图像”
//初始化myMat,用于保存原始图像
Mat myMat=new Mat();
Utils.bitmapToMat(myBitmap,myMat);
//初始化myMaskMat,用于创建遮罩层
Mat myMaskMat=new Mat(myMat.size(), CvType.CV_8U,new Scalar(0));
//设置半径和圆心坐标
int myRadius=300;
Point myPoint=new Point(720,660);
//在遮罩层上绘制实心圆
Imgproc.circle(myMaskMat,myPoint,myRadius,new Scalar(255),-1);
//初始化myMaskedMat,用于保存抠取的圆形图像
Mat myMaskedMat=new Mat();
//根据myMaskMat在myMat上抠取圆形图像,然后保存在myMaskedMat上
myMat.copyTo(myMaskedMat,myMaskMat);
//创建空Bitmap,用于保存抠取的圆形图像
Bitmap myNewBitmap=Bitmap.createBitmap(myMaskedMat.width(),
myMaskedMat.height(),Bitmap.Config.ARGB_8888);
//将抠取的圆形图像输出至myNewBitmap
Utils.matToBitmap(myMaskedMat,myNewBitmap);
//通过ImageView控件显示抠取的圆形图像
myImageView.setImageBitmap(myNewBitmap);
}
}
代码说明
上面这段代码在MyCode\MySampleK96\app\src\main\java\com\bin\luo\mysample\ MainActivity.java文件中。在这段代码中,Imgproc的circle()方法用于在图像上绘制圆形,该方法的语法声明如下:
static void circle(Mat img, Point center,
int radius, Scalar color, int thickness)
其中,参数Mat img表示图像;参数Point center表示圆心坐标;参数int radius表示半径;参数Scalar color表示线条颜色;参数int thickness表示线条宽度,如果该参数值为负数,表示使用线条颜色(Scalar color)填充圆形内部。
此实例的完整代码在MyCode\MySampleK96文件夹中。
补充说明
在测试代码时,必须保持网络畅通。
源代码下载
关注微信公众号,后台回复关键词 “Android App开发超实用代码074” 即可获得完整源代码。
参考书籍


扫码优惠购书
《Android App开发超实用代码集锦——jQuery Mobile+OpenCV+O》
ISBN:9787302589358
作者:罗帅、罗斌
定价:99元
问题描述+解决方案+真实源码+效果截图
介绍jQuery Mobile、OpenCV、OpenGL等在Android平台运行的应用
300个实例,提供完整源代码,边看边做边学











