CameraX获取摄像头YUV数据
- 添加依赖
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"
- 声明权限
<uses-feature android:name="android.hardware.camera.any" /> <uses-permission android:name="android.permission.CAMERA" />
- 预览布局
<?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>
- 代码部署
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数据相关推荐
- Qt 中获取摄像头图像数据的方法
Qt 中获取摄像头图像数据的方法 在 Qt 中提供了 QCamera 类用来操作摄像头.(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机.)摄像头获取的实时图像可 ...
- ffmpeg 采集摄像头yuv数据
本文讲述在linux下,如何使用ffmpeg采集摄像头yuv数据,并保存为文件. 分为4个部分进行讲解 需要的软硬件环境 使用ffmpeg命令采集yuv数据. 使用ffmpeg代码采集yuv数据. 查 ...
- Android 关于获取摄像头帧数据解码
由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera.Param ...
- Android -- 获取摄像头帧数据解码
由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open();Camera.Parame ...
- android关于获取摄像头帧数据转成图片
第一部分: 由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera ...
- c语言编程获取摄像头图像,OpenCV 获取摄像头图像数据并显示
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 用摄像头来获取数据的应用其实并不算太多,最近刚刚好用到,查了下用OpenCV来实现非常方便 ...
- 【UE Unreal Camera】【保姆级教程二】手把手教你通过UE获取摄像头帧数据
概述 在UE 摄像头教程一中,我们已经通过Unreal自带的媒体播放器打开了摄像头,并且将摄像头的数据展示在了游戏画面中.当然这只是最基本的功能,一般情况下,我们需要对摄像头的画面数据进行处理,比 ...
- 安卓获取摄像头帧率_Android 关于获取摄像头帧数据
第一部分: 由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera. ...
- 使用FFMpeg API 获取摄像头的图像数据
文章目录 1. 获取摄像头的信息 2. 打开并初始化摄像头 3. 获取摄像头数据及渲染 摄像头是我们比较常用的外设,很多场景我们都会用到摄像头.比如视频直播.视频监控等各个领域都会用到摄像头.摄像头图 ...
最新文章
- 一个97年的IT人创业历程中的总结和感悟
- 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party
- Mysql事务以及加锁机制事务的特征ACID
- att汇编教程 linux,ATT 汇编语法
- python widnows mysql_python用Windows开发配置mysql数据库
- 局域网远控软件DameWareNT6500
- python中fac函数_python系列-基础
- 有哪些连接oracle的工具,连接oracle数据库工具有哪些
- 11个思维导图知识点整理帮你决胜考研(基础课和计算机专业课)| 寻找C站宝藏
- SpringBoot添加FastJson消息转换器(自用)
- 浅谈人机工程应用在数字化工艺中的作用
- 2.python制作的倒计时小工具
- 摄影毁一生单反穷三代顺口溜_哪款便宜的单反相机好
- 每日学习(Git和Github)
- 自主导航:赋予移动机器人智能感知与运动的能力
- lombok slfj 中_Lombok快速入门
- 阿里的防DDoS能力有多强,小蚁带你了解一下
- 游戏设计艺术 第2版 第24章 读书笔记
- 【JavaScript练习】实现数组按照数组项中userName中的姓名拼音排序
- 纽约大学计算机与科学,NYU的Computer Science and Engineering「纽约大学计算机科学与工程系」...
热门文章
- Excel公式教程 易失函数和半易失函数
- lump搭建环境知识点
- 关于HC04超声波模块测距的进一步思考(51版)
- c语言无法用3字母序列,当字符序列工作为下图输入时,输出长度为3的,且可用作C语言标识符的序列的有()。【浙江大学2004...
- Linux 错误:delimited by end-of-file (wanted `EOF')
- 使用SpinWait来优化等待性能
- VNote: 程序员的Markdown笔记软件
- 手把手教你做背单词软件
- 计算机科学与技术考苏卅大学怎么样,【图片】18年苏州大学计算机872考研经验分享【苏州大学研究生吧】_百度贴吧...
- bash逐行读取文件