图像处理(二)opencv处理图像二值化,灰度化等
2016-10-24 19:05
274 查看
这里主要实现的 opencv 基于 android 对图像进行常用处理,比如说灰度化,二值化,rgb的转换,这里就不贴主要代码,只是工具代码。
Utils.xxx方法的使用需要在MainActivity.class中添加此方法(好像是掉用opencv,android手机首次使用需要下载):
Utils(处理方法)
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; }
相关文章推荐
- opencv图像的读入、灰度化、二值化、反色
- opencv图像的读入、灰度化、二值化、反色
- 2.2 BMP文件 灰度化 二值化 亮度调整有关BMP图像处理的底层函数
- Java之Opencv图像灰度化处理-yellowcong
- 图像处理灰度化和二值化
- Opencv-图像灰度化、二值化
- 一些基本的opencv图像预处理函数直接用法(灰度化,otsu二值化,腐蚀膨胀,canny)
- Python-OpenCV 处理图像(七):图像灰度化处理
- Python-OpenCV 处理图像(六)(七)(八):对象识别 图像灰度化处理 图像二值化处理
- 图像基础、OpenCV入门3——图像灰度化、二值化与图像加噪
- opencv 图片基本处理(灰度化,反色,二值化,膨胀腐蚀以及ROI的copy等)
- Opencv实现图像的灰度处理,二值化,阀值选择
- opencv简单的彩色图像灰度化和二值化(学习笔记)
- opencv之图像二值化处理threshold
- OpenCV实现彩色图像转换为灰度图及二值化处理
- 图像处理——灰度化、二值化、膨胀算法、腐蚀算法以及开运算和闭运算
- opencv图像的读入、灰度化、二值化、反色
- Python-OpenCV 处理图像(七):图像灰度化处理
- python 读取、保存、二值化、灰度化图片+opencv处理图片的方法
- 【OpenCV图像处理】二、图像的二值化操作