(一) byte[] 转换为Mat,Mat 转 byte[]

public Mat byteAndMat(Mat image) {int width = image.cols();int height = image.rows();int dims = image.channels();byte[] data = new byte[width*height*dims];image.get(0, 0, data); //Mat转byteint index = 0;int r=0, g=0, b=0;for(int row=0; row<height; row++) {for(int col=0; col<width*dims; col+=dims) {index = row*width*dims + col;b = data[index]&0xff;g = data[index+1]&0xff;r = data[index+2]&0xff;data[index] = (byte)b;data[index+1] = (byte)g;data[index+2] = (byte)r;}}image.put(0, 0, data); //byte转Matreturn image;}

(二)byte[] 转换为Bitmap ,Bitmap 转 byte[]

//Bitmap转byte
public static byte[] bitmapToByteArray(Bitmap image) {//calculate how many bytes the image consists of.int bytes = bm.getByteCount();ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new bufferimage.copyPixelsToBuffer(buffer); //Move the byte data to the bufferreturn buffer.array(); //Get the underlying array containing the data.}//或者是下面的这种形式
public void BitmapToBYTE(Bitmap image) {int bytes = image.getByteCount();ByteBuffer buffer = ByteBuffer.allocate(bytes); // Create a bufferimage.copyPixelsToBuffer(buffer); // Move the byte data to the bufferbyte[] temp = buffer.array(); // Get the underlying array }
//Byte转Bitmap
public Bitmap ByteArray2Bitmap(byte[] data, int width, int height) {int Size = width * height;int[] rgba = new int[Size];for (int i = 0; i < height; i++)for (int j = 0; j < width; j++) {rgba[i * width + j] = 0xff000000;}Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);bmp.setPixels(rgba, 0 , width, 0, 0, width, height);return bmp;
}

(三)Mat与Bitmap类型转换

//Mat转Bitmap
public static Bitmap matToBitmap(Mat mat) {Bitmap resultBitmap = null;if (mat != null) {resultBitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888);if (resultBitmap != null)Utils.matToBitmap(mat, resultBitmap);}return resultBitmap;
}//Bitmap转Mat
public static Mat bitmapToMat(Bitmap bm) {Bitmap bmp32 = bm.copy(Bitmap.Config.RGB_565, true);     Mat imgMat = new Mat ( bm.getHeight(), bm.getWidth(), CvType.CV_8UC2, new Scalar(0));Utils.bitmapToMat(bmp32, imgMat);return imgMat;
}

(四)Bitmap保存照片jpg格式为例

   public int saveImageToGallery(Bitmap bmp) {//生成路径String root = Environment.getExternalStorageDirectory().getAbsolutePath();String dirName = "saveimage";File appDir = new File(root , dirName);if (!appDir.exists()) {appDir.mkdirs();}String fileName = "bitmap.jpg";//获取文件File file = new File(appDir, fileName);FileOutputStream fos = null;try {fos = new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();return 0;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}}return -1;}

(五)读写权限动态获取

Android6.0以后,读写内存、操作图像等除了需要在AndroidManifest.xml文件中添加相关权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

另外还需要在Activity中动态获取,代码如下:

    private void checkPermission() {// Storage Permissionsfinal int REQUEST_EXTERNAL_STORAGE = 1;String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};try {//检测是否有写的权限int permission = ActivityCompat.checkSelfPermission(MainActivity.this,"android.permission.WRITE_EXTERNAL_STORAGE");if (permission != PackageManager.PERMISSION_GRANTED) {// 如果没有读写权限,申请读写权限ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);}} catch (Exception e) {e.printStackTrace();}}

将上述代码添加到onCreate中即可,Activity运行时会弹出读写权限提示框。

参考:

https://blog.csdn.net/qluojieq/article/details/78289795?locationNum=7&fps=1

https://blog.csdn.net/u013547134/article/details/40918513

https://www.jb51.net/article/137657.htm

https://github.com/fiubaar/cliente/blob/3466e5e35a8459aef7174cf6b64a2ce81916656a/src/com/fi/uba/ar/utils/MatUtils.java

android for opencv (2) byte[] ,Bitmap 与 Mat 类型转换,Bitmap保存照片相关推荐

  1. Android之OpenCv简单人脸识别功能(Bitmap)

    Android之OpenCv简单人脸识别功能 OpenCv的下载 下载地址 - https://opencv.org/releases/ doc 文档目录 samples 示例代码 sdk 编译后的动 ...

  2. Android和OpenCV的学习mat运算/颜色转换

    目录 1 Mat 1.1 Mat的概念 1.2 Bitmap和Mat的转换 1.3 Mat的位运算和算术运算 1.4 Mat的release 2 颜色转换 2.1 图像色彩模式 2.2 cvtColo ...

  3. bitmap与mat互转方便opencv操作

    bitmap与mat互转方便opencv操作 前言 老实说接下来要说的有点复杂,甚至还有可能不够特别详细.所以哪里有不懂的,可以在这篇博客下留言,我也会及时回复留言和修改这篇博客. 开发工具是andr ...

  4. OpenCV之Mat与Bitmap之间的转换

    我们想在Android平台上开发OPenCV(处理图像):避免不了显示,通常在Android当中展示图像都是通过ImageView这个控件,当然展示的方式也有几种,在下面的内容中会简单介绍一下.但是我 ...

  5. mat opencv 修改roi_OpenCV Android:在新Mat中定义并保存ROI(OpenCV Android: Define and save ROI in new Mat)...

    OpenCV Android:在新Mat中定义并保存ROI(OpenCV Android: Define and save ROI in new Mat) 我正在尝试将我的图像的一部分切割(裁剪)到另 ...

  6. 学习笔记—android实现opencv人脸检测

    1.导入opencv库 在Android studio导入OpenCV配置使用中有详细说明 2.添加文件 Manifest 的设置权限,主要是对摄像头添加权限 <?xml version=&qu ...

  7. Android 使用OpenCV的三种方式(Android Studio)

    from: http://blog.csdn.net/sbsujjbcy/article/details/49520791 其实最早接触OpenCV是很久很久之前的事了,大概在2013年的5,6月份, ...

  8. opencv android jni,OpenCV - AndroidStudio的JNI工程及引用OpenCV

    一把利刃,用不好,会伤到你遍体鳞伤.用得好,便为你披荆斩棘,所向披靡.好与不好之间,便是历练. 几经波折,终于跌跌撞撞,集成了OpenCV,并实现了灰度图片,自此一扇新的大门已经打开. 至此我手中已经 ...

  9. pyTorch入门(六)——实战Android Minist OpenCV手写数字识别(附源码地址)

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4239字,预计阅读12分钟 前言 前面几篇文章实现了pyTorch训练模型,然后在Windows平台用C++ OpenCV D ...

  10. Android 利用OpenCV 的Stitcher做全景图片拼接(支持平面和球面)

    开发项目中遇到一个需求 就是用手机按照顺序拍几张图片 然后将图片拼接成一张全景的照片 百度了一下 看到OpenCV 的Stitcher工具支持全景图片拼接 于是研究了一下OpenCV  花了差不多一周 ...

最新文章

  1. Ajax Toolkit 控件学习系列(13) ——FilteredTextBoxExtender 控制输入
  2. jvm_垃圾收集算法讲解(二)
  3. 院士怒批:中国科研被SCI和西方支配,贫于创新、贫于思想
  4. 9.linux ntp服务器搭建
  5. Java 重写 多态性_Java 学习(12):重写(Override)与重载(Overload) 多态
  6. 从零开始学Qt(一)前言
  7. Quant量化面试题 数学 逻辑题 过河、生日、烧绳、称重
  8. CEO陈睿多措施并举,为B站的创新发展护航
  9. Unity中帧数FPS的显示查看
  10. 【Android】虚拟环绕声
  11. Eclipse调试python
  12. QT中的setAttribute()用法
  13. IC/FPGA一文练完
  14. 2016 ECCV-Gated Siamese Convolutional Neural Network Architecture for Human Re-ID
  15. ANTVR:虚拟现实的拓荒者
  16. 银行降转账额度 “余额宝”要当心了
  17. Python写游戏,我上我也行 - Flappy Bird 03
  18. if和for的几个经典题目
  19. Capture ORCAD CIS导出原理库OLB文件
  20. GitHub上嵌入式相关的高星开源项目

热门文章

  1. spring 13-Spring框架基于Annotation的AOP配置
  2. 【Eclipse】Eclipse-Build-缓慢-卡住
  3. ReentrantLock与Condition构造有界缓存队列与数据栈
  4. windows下搭建ffmpeg环境
  5. Vue报错: Maximum call stack size exceeded
  6. packages are looking for funding
  7. 经典排序算法(二)--桶排序Bucket Sort
  8. 21. 总是让比较函数在等值情况下返回false
  9. springboot处理静态资源
  10. 多个android客户端使用的数据库,android – 将Firebase数据库与本地数据库一起使用...