OpenCV在Android手机实现在图像上添加文本


OpenCV在Android手机实现在图像上添加文本

文章插图
 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它可以运行在linux、windows、Android和mac OS等操作系统上 。OpenCV原本由一系列 C 函数和少量 C++ 类构成,同时提供了Python/ target=_blank class=infotextkey>Python等其他语言的接口,它实现了图像处理和计算机视觉方面的很多通用算法 。下面这个实例演示了使用OpenCV在Android手机实现在图像上绘制文本 。本文提供的OpenCV实例使用JAVA语言编写,并且运行在Android手机上 。
01、实例功能此实例主要通过使用Imgproc的putText()方法,实现在图像上绘制(添加)文本 。Imgproc是Image和Processing这两个单词的缩写组合,它是OpenCV的图像处理模块,该模块包含如下内容:线性和非线性的图像滤波、图像的几何变换、图像转换、直方图相关、结构分析和形状描述、运动分析和对象跟踪、特征检测、目标检测等 。
当实例运行之后,单击“显示原始图像”按钮,原始图像的效果如图1(a)所示 。单击“在图像上添加文本”按钮,在图像上添加文本(OpenCV)之后的效果如图1(b)所示 。
OpenCV在Android手机实现在图像上添加文本

文章插图
 
02、实现代码public class MainActivity extends Activity { ImageView myImageView; Bitmap myBitmap; static{ System.loadLibrary("opencv_java3");}//加载OpenCV库 @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myImageView = (ImageView) findViewById(R.id.myImageView);myBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.myimage1); } public void onClickButton1(View v) {//响应单击按钮“显示原始图像”myImageView.setImageBitmap(myBitmap); } public void onClickButton2(View v) {//响应单击按钮“在图像上添加文本”Bitmap myNewBitmap=Bitmap.createBitmap(myBitmap.getWidth(),myBitmap.getHeight(),Bitmap.Config.RGB_565); //根据原始图像创建空BitmapMat myMat=new Mat();Utils.bitmapToMat(myBitmap,myMat);//将原始图像保存至myMatPoint myPoint=new Point(300, 700);//定义绘制文本的起始位置Scalar myScalar=new Scalar(255,0,0,255);//设置绘制文本的颜色//在图像上添加文本(仅支持英文、符号等,中文暂不支持)Imgproc.putText(myMat,"OpenCV",myPoint,Core.FONT_HERSHEY_COMPLEX,4,myScalar,3);//将添加文本之后的图像输出至myNewBitmapUtils.matToBitmap(myMat,myNewBitmap);//通过ImageView控件显示叠加文本之后的图像myImageView.setImageBitmap(myNewBitmap); }}03、代码说明上面这段代码在MyCode\MySampleK31\App\src\main\java\com\bin\luo\mysample\ MainActivity.java文件中 。在这段代码中,Imgproc的putText()方法用于在图像上添加文字(字母),该方法的语法声明如下:
OpenCV在Android手机实现在图像上添加文本

文章插图
【OpenCV在Android手机实现在图像上添加文本】其中,参数Mat img表示待绘制的图像;参数String text表示待绘制的文字;参数Point org表示文字的起点坐标;参数int fontFace表示字体;参数double fontScale表示文字大小因子,值越大文字越大;参数Scalar color表示文字颜色;参数int thickness表示文字线条宽度 。
Utils.bitmapToMat(myBitmap,myMat)用于将Bitmap输出到Mat,该方法的语法声明如下: 
OpenCV在Android手机实现在图像上添加文本

文章插图
其中,参数Bitmap bmp表示源Bitmap,支持ARGB_8888和RGB_565像素类型;参数Mat mat表示目标Mat,默认类型是CV_8UC4类型,大小和Bitmap一样,通道顺序为RGBA 。
Utils.matToBitmap(myMat,myNewBitmap)用于将Mat输出到Bitmap,该方法的语法声明如下: 
OpenCV在Android手机实现在图像上添加文本

文章插图
其中,参数Mat mat表示源Mat,支持CV_8UC1,CV_8UC3或CV_8UC4类型;参数Bitmap bmp表示目标Bitmap,支持ARGB_8888或RGB_565类型 。
static{ System.loadLibrary("opencv_java3");}表示加载OpenCV库 。默认情况下,在Android中使用OpenCV需要导入相关的库文件,具体操作步骤如下 。 
(1) 从https://opencv.org/releases.html页面中单击Android pack超链接,稍等一会儿即可弹出“新建下载任务”对话框,然后在该对话框中单击“下载”按钮,执行下载操作,如图2所示 。在下载完成之后解压文件即可 。在此实例中,可以忽略此步骤,直接从源代码中复制openCVLibrary345Copy文件夹到项目即可 。
OpenCV在Android手机实现在图像上添加文本

文章插图


推荐阅读