图像处理(二)opencv处理图像二值化,灰度化等
来源:互联网 发布:java获取svn文件列表 编辑:程序博客网 时间:2024/06/07 10:52
这里主要实现的 opencv 基于 android 对图像进行常用处理,比如说灰度化,二值化,rgb的转换,这里就不贴主要代码,只是工具代码。
Utils.xxx方法的使用需要在MainActivity.class中添加此方法(好像是掉用opencv,android手机首次使用需要下载):
//OpenCV库加载并初始化成功后的回调函数 private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { // TODO Auto-generated method stub switch (status){ case BaseLoaderCallback.SUCCESS: Log.i(TAG, "成功加载"); break; default: super.onManagerConnected(status); Log.i(TAG, "加载失败"); break; } } }; @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); //load OpenCV engine and init OpenCV library OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_4, getApplicationContext(), mLoaderCallback); Log.i(TAG, "onResume sucess load OpenCV..."); // new Handler().postDelayed(new Runnable(){ // // @Override // public void run() { // // TODO Auto-generated method stub // procSrc2Gray(); // } // // }, 1000); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
Utils(处理方法)
//灰度化 public Bitmap procSrc2Gray(Bitmap bm){ Mat rgbMat = new Mat(); Mat grayMat = new Mat(); Bitmap graybm = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Config.ARGB_8888); //创建图像 Utils.bitmapToMat(bm, rgbMat);//bitmap转RGB,常用 Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat Utils.matToBitmap(grayMat, graybm); return graybm; }//(额外附上bitmap的处理方法)灰度化 public Bitmap bitmap2Gray(Bitmap bmSrc) { // 得到图片的长和宽 int width = bmSrc.getWidth(); int height = bmSrc.getHeight(); // 创建目标灰度图像 Bitmap bmpGray = null; bmpGray = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); // 创建画布 Canvas c = new Canvas(bmpGray); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); paint.setColorFilter(f); c.drawBitmap(bmSrc, 0, 0, paint); return bmpGray; } //旋转 public Bitmap rotaingImageView(int angle , Bitmap bitmap) { //旋转图片 动作 Matrix matrix = new Matrix(); matrix.postRotate(angle); // 创建新的图片 Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); return bm; } //RGB转换 public Bitmap transparentImage(Bitmap bm){ Mat rgbMat = new Mat(); Mat grayMat = new Mat(); double[] data = {250,250,250,250};//data即颜色 Bitmap graybm = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Config.ARGB_8888); Utils.bitmapToMat(bm, rgbMat); for(int i=0;i<rgbMat.rows();i++) { for(int j=0;j<rgbMat.cols();j++) { rgbMat.put(i, j, data); } } Utils.matToBitmap(rgbMat, graybm); return graybm; }//(额外附上bitmap方法)RGB转换 public Bitmap transparentImage(Bitmap bmp) { /* pixels 接收位图颜色值的数组 offset 写入到pixels[]中的第一个像素索引值 stride pixels[]中的行间距个数值(必须大于等于位图宽度)。可以为负数 x 从位图中读取的第一个像素的x坐标值。 y 从位图中读取的第一个像素的y坐标值 width 从每一行中读取的像素宽度 height 读取的行数 */ int m_ImageWidth, m_ImageHeigth; m_ImageWidth = bmp.getWidth(); m_ImageHeigth = bmp.getHeight(); m_BmpPixel = new int[m_ImageWidth * m_ImageHeigth]; bmp.getPixels(m_BmpPixel, 0, m_ImageWidth, 0, 0, m_ImageWidth, m_ImageHeigth); System.out.println("AAAAAAAAAAAA2"); for (int i = 0; i < m_ImageWidth * m_ImageHeigth; i++) { if (m_BmpPixel[i] == Color.WHITE) { m_BmpPixel[i] = Color.BLACK; } } System.out.println("AAAAAAAAAAAA3"); Bitmap pro = Bitmap.createBitmap(m_ImageWidth,m_ImageHeigth, Bitmap.Config.ARGB_8888); pro.setPixels(m_BmpPixel, 0, m_ImageWidth, 0, 0, m_ImageWidth, m_ImageHeigth); System.out.println("AAAAAAAAAAAA4"); return pro; }//二值化 /* 名称 常量 二值阈值化 Imgproc.THRESH_BINARY 阈值化到零 Imgproc.THRESH_TOZERO 截断阈值化 Imgproc.THRESH_TRUNC 反转二值阈值化 Imgproc.THRESH_BINARY_INV 反转阈值化到零 Imgproc.THRESH_TOZERO_INV */ public Bitmap changeBitmap(Bitmap bm) { Mat rgbMat = new Mat(); Mat grayMat = new Mat(); Utils.bitmapToMat(bm,rgbMat); Imgproc.threshold(rgbMat,grayMat,100,255,Imgproc.THRESH_BINARY); Utils.matToBitmap(grayMat,bm); return bm; } //(额外附上bitmap方法)二值化 public Bitmap gray2Binary(Bitmap graymap) { //得到图形的宽度和长度 int width = graymap.getWidth(); int height = graymap.getHeight(); //创建二值化图像 Bitmap binarymap = null; binarymap = graymap.copy(Config.ARGB_8888, true); //依次循环,对图像的像素进行处理 for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { //得到当前像素的值 int col = binarymap.getPixel(i, j); //得到alpha通道的值 int alpha = col & 0xFF000000; //得到图像的像素RGB的值 int red = (col & 0x00FF0000) >> 16; int green = (col & 0x0000FF00) >> 8; int blue = (col & 0x000000FF); // 用公式X = 0.3×R+0.59×G+0.11×B计算出X代替原来的RGB int gray = (int) ((float) red * 0.3 + (float) green * 0.59 + (float) blue * 0.11); //对图像进行二值化处理 if (gray <= 95) { gray = 0; } else { gray = 255; } // 新的ARGB int newColor = alpha | (gray << 16) | (gray << 8) | gray; //设置新图像的当前像素值 binarymap.setPixel(i, j, newColor); } } return binarymap; }
0 0
- 图像处理(二)opencv处理图像二值化,灰度化等
- Python-OpenCV 处理图像(七):图像灰度化处理
- Python-OpenCV 处理图像(七):图像灰度化处理
- WPF:图像处理(二)灰度化
- WPF:图像处理(二)灰度化
- Python-OpenCV 处理图像(六)(七)(八):对象识别 图像灰度化处理 图像二值化处理
- iOS OpenCV 图像灰度处理
- iOS OpenCV 图像灰度处理
- 图像处理:图像灰度化
- 图像灰度化处理
- 【OpenCV】图像处理(二)图像形态学
- java图像处理---灰度化(二值化)处理
- python-openvc 图像灰度化处理 图像二值化处理
- OpenCV简单图像处理 灰度变换
- 利用Opencv进行图像灰度变换处理
- 图像处理灰度化和二值化
- 图像处理: 灰度化,二值化,反色
- delphi图像灰度化处理
- ios developer tiny share-20161014
- Flutter基础—第一个Flutter实例
- boost :: scoped_ptr的和std ::的unique_ptr的区别
- 第2.1.4章 WEB系统最佳实践Spring文件配置之spring-hessian-server.xml
- C++Virus手打系列,仅供研究
- 图像处理(二)opencv处理图像二值化,灰度化等
- 第二次作业——Service、Listview与ACtivity参数传递
- spring声明式事务管理
- jquery源码——buildFragment
- 关于添加openwrt软件包的概述
- 文献阅读(8)
- 数据持久化
- LeetCode-----48. Rotate Image(二维矩阵旋转90度)
- SRM147_DIV2