1. 添加依赖

    1. def camerax_version = "1.0.0-beta07"
      implementation "androidx.camera:camera-camera2:$camerax_version"
      implementation "androidx.camera:camera-lifecycle:$camerax_version"
      implementation "androidx.camera:camera-view:1.0.0-alpha14"
  2. 声明权限
    1. <uses-feature android:name="android.hardware.camera.any" />
      <uses-permission android:name="android.permission.CAMERA" />
  3. 预览布局
    1. <?xml version="1.0" encoding="utf-8"?>
      <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.camera.view.PreviewViewandroid:id="@+id/previewView"android:layout_width="match_parent"android:layout_height="match_parent" /></FrameLayout>
  4. 代码部署
    1. package com.melon.camerademo;import android.Manifest;
      import android.content.pm.PackageManager;
      import android.os.Bundle;
      import android.util.Log;
      import android.widget.Toast;import androidx.annotation.NonNull;
      import androidx.annotation.Nullable;
      import androidx.appcompat.app.AppCompatActivity;
      import androidx.camera.core.CameraSelector;
      import androidx.camera.core.ImageAnalysis;
      import androidx.camera.core.ImageCapture;
      import androidx.camera.core.ImageProxy;
      import androidx.camera.core.Preview;
      import androidx.camera.lifecycle.ProcessCameraProvider;
      import androidx.camera.view.PreviewView;
      import androidx.core.app.ActivityCompat;
      import androidx.core.content.ContextCompat;import com.google.common.util.concurrent.ListenableFuture;import java.nio.ByteBuffer;
      import java.util.concurrent.ExecutorService;
      import java.util.concurrent.Executors;public class MyActivity extends AppCompatActivity {private static final String TAG = "MyActivity";private static final int CAMERA_REQUEST_CODE = 100;private static final CameraSelector MY_CAMERA = CameraSelector.DEFAULT_BACK_CAMERA;private PreviewView mPreviewView;private ImageCapture mImageCapture;ExecutorService mCameraExecutor = Executors.newSingleThreadExecutor();@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//启动摄像头startCamera();}private void initView() {mPreviewView = findViewById(R.id.previewView);}private void startCamera() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "没有摄像头权限", Toast.LENGTH_LONG).show();Log.e(TAG, "没有摄像头权限");//权限申请ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);return;}Log.d(TAG, "有了摄像头权限");ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);cameraProviderFuture.addListener(new Runnable() {@Overridepublic void run() {try {ProcessCameraProvider cameraProvider = cameraProviderFuture.get();Preview preview = new Preview.Builder().build();preview.setSurfaceProvider(mPreviewView.createSurfaceProvider());mImageCapture = new ImageCapture.Builder().build();//图像分析ImageAnalysis imageAnalyzer = new ImageAnalysis.Builder().build();imageAnalyzer.setAnalyzer(mCameraExecutor, new ImageAnalysis.Analyzer() {@Overridepublic void analyze(@NonNull ImageProxy image) {// 分析ByteBuffer byteBuffer = image.getPlanes()[0].getBuffer();int pixelStride = image.getPlanes()[0].getPixelStride();int rowStride = image.getPlanes()[0].getRowStride();ByteBuffer byteBuffer1 = image.getPlanes()[1].getBuffer();int pixelStride1 = image.getPlanes()[1].getPixelStride();int rowStride1 = image.getPlanes()[1].getRowStride();ByteBuffer byteBuffer2 = image.getPlanes()[2].getBuffer();int pixelStride2 = image.getPlanes()[2].getPixelStride();int rowStride2 = image.getPlanes()[2].getRowStride();int rotationDegrees = image.getImageInfo().getRotationDegrees();int format = image.getFormat(); //CameraX默认出图格式:YUV_420_888  YYYY UV VU,数据分别在image.getPlanes()[0],image.getPlanes()[1],image.getPlanes()[2]中int width = image.getWidth();int height = image.getHeight();Log.d(TAG, "capacity: " + byteBuffer.capacity()+ ", pixelStride: " + pixelStride+ ", rowStride: " + rowStride+ ", capacity1: " + byteBuffer1.capacity()+ ", pixelStride1: " + pixelStride1+ ", rowStride1: " + rowStride1+ ", capacity2: " + byteBuffer2.capacity()+ ", pixelStride2: " + pixelStride2+ ", rowStride2: " + rowStride2+ ", rotationDegrees: " + rotationDegrees+ ", format: " + format+ ", width: " + width+ ", height: " + height);image.close();}});cameraProvider.unbindAll();cameraProvider.bindToLifecycle(MyActivity.this, MY_CAMERA, preview, mImageCapture, imageAnalyzer);} catch (Exception e) {Log.e(TAG, "error: " + e.getMessage());}}}, ContextCompat.getMainExecutor(this));}}
      

CameraX获取摄像头YUV数据相关推荐

  1. Qt 中获取摄像头图像数据的方法

    Qt 中获取摄像头图像数据的方法 在 Qt 中提供了 QCamera 类用来操作摄像头.(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机.)摄像头获取的实时图像可 ...

  2. ffmpeg 采集摄像头yuv数据

    本文讲述在linux下,如何使用ffmpeg采集摄像头yuv数据,并保存为文件. 分为4个部分进行讲解 需要的软硬件环境 使用ffmpeg命令采集yuv数据. 使用ffmpeg代码采集yuv数据. 查 ...

  3. Android 关于获取摄像头帧数据解码

    由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera.Param ...

  4. Android -- 获取摄像头帧数据解码

    由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open();Camera.Parame ...

  5. android关于获取摄像头帧数据转成图片

    第一部分: 由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera ...

  6. c语言编程获取摄像头图像,OpenCV 获取摄像头图像数据并显示

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 用摄像头来获取数据的应用其实并不算太多,最近刚刚好用到,查了下用OpenCV来实现非常方便 ...

  7. 【UE Unreal Camera】【保姆级教程二】手把手教你通过UE获取摄像头帧数据

    概述   在UE 摄像头教程一中,我们已经通过Unreal自带的媒体播放器打开了摄像头,并且将摄像头的数据展示在了游戏画面中.当然这只是最基本的功能,一般情况下,我们需要对摄像头的画面数据进行处理,比 ...

  8. 安卓获取摄像头帧率_Android 关于获取摄像头帧数据

    第一部分: 由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera. ...

  9. 使用FFMpeg API 获取摄像头的图像数据

    文章目录 1. 获取摄像头的信息 2. 打开并初始化摄像头 3. 获取摄像头数据及渲染 摄像头是我们比较常用的外设,很多场景我们都会用到摄像头.比如视频直播.视频监控等各个领域都会用到摄像头.摄像头图 ...

最新文章

  1. 一个97年的IT人创业历程中的总结和感悟
  2. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party
  3. Mysql事务以及加锁机制事务的特征ACID
  4. att汇编教程 linux,ATT 汇编语法
  5. python widnows mysql_python用Windows开发配置mysql数据库
  6. 局域网远控软件DameWareNT6500
  7. python中fac函数_python系列-基础
  8. 有哪些连接oracle的工具,连接oracle数据库工具有哪些
  9. 11个思维导图知识点整理帮你决胜考研(基础课和计算机专业课)| 寻找C站宝藏
  10. SpringBoot添加FastJson消息转换器(自用)
  11. 浅谈人机工程应用在数字化工艺中的作用
  12. 2.python制作的倒计时小工具
  13. 摄影毁一生单反穷三代顺口溜_哪款便宜的单反相机好
  14. 每日学习(Git和Github)
  15. 自主导航:赋予移动机器人智能感知与运动的能力
  16. lombok slfj 中_Lombok快速入门
  17. 阿里的防DDoS能力有多强,小蚁带你了解一下
  18. 游戏设计艺术 第2版 第24章 读书笔记
  19. 【JavaScript练习】实现数组按照数组项中userName中的姓名拼音排序
  20. 纽约大学计算机与科学,NYU的Computer Science and Engineering「纽约大学计算机科学与工程系」...

热门文章

  1. Excel公式教程 易失函数和半易失函数
  2. lump搭建环境知识点
  3. 关于HC04超声波模块测距的进一步思考(51版)
  4. c语言无法用3字母序列,当字符序列工作为下图输入时,输出长度为3的,且可用作C语言标识符的序列的有()。【浙江大学2004...
  5. Linux 错误:delimited by end-of-file (wanted `EOF')
  6. 使用SpinWait来优化等待性能
  7. VNote: 程序员的Markdown笔记软件
  8. 手把手教你做背单词软件
  9. 计算机科学与技术考苏卅大学怎么样,【图片】18年苏州大学计算机872考研经验分享【苏州大学研究生吧】_百度贴吧...
  10. bash逐行读取文件