问题标签 [image-reader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2462 浏览

android - acquireNextImage 与 acquireLatestImage 之间的区别

我正在使用 Camera2 API 连续拍照并且工作正常,在这里我可以使用以下代码保存捕获的图像:

在这里我想知道通过acquireLatestImageacquireNextImage获取图像的最佳情况是什么?适合获得连续图像。

0 投票
1 回答
1694 浏览

preview - 获取帧时android camera2预览滞后

我正在使用 Android camera2 以在预览模式下实时提取帧以将它们缝合到 NDK 端(openCv)。我使用ImageReader表面来获取帧,但它仅限于最大帧值。

它工作得很好,但由于我们需要所有帧,因此必须从ImageReader目标表面移除CaptureRequest.Builder并再次添加它。所以我们在这一点上有一个滞后。

我们怎样才能ImageReader没有最大帧,或者我们怎样才能从camera2中的实时视频中获取所有帧而没有任何预览延迟?

我的代码:

0 投票
0 回答
1311 浏览

java - 解锁屏幕后未调用 onImageAvailable() 函数

在测试 Android Camera2 API 的性能时,我注意到与ImageReader.

当应用程序启动时,onImageAvailable()函数被正确调用,但在锁定和解锁屏幕后,它根本没有被调用。我的应用程序中处理相机的部分基于 Camera2Basic Google 教程。

更重要的是,我已经安装了提供 Camera2 API 的Camera2Basic Android 演示应用程序,我发现即使是谷歌制作的这个应用程序也有同样的问题。

这个问题有什么解决办法吗?

在 Android Studio 中使用 Debug 工具一段时间后,我发现只有在用于预览的函数在函数中可用onImageAvailable()时才会出现调用函数 的问题。TextureViewonResume()

如果mTextureView.isAvailable()返回falseSurfaceTextureListener设置为 on,mTextureViewonImageAvailable()正确调用,但如果openCamera(mTextureView.getWidth(), mTextureView.getHeight())在问题中调用函数onResume()

0 投票
1 回答
128 浏览

android - 如何映射从 ImageReader Camera2 接收的图像的 CameraResult 的 getFrameNumber

我需要从我的 camera2getFrameNumber接收到的 Image 对象。ImageReader

目前,我收到以下代码的不同时间戳,因此,我无法映射回调getFrameNumberCameraResult

现在在 ImageReader 回调:-

现在的问题是图像阅读器mTimeStap与值不匹配result.get(CaptureResult.SENSOR_TIMESTAMP) / 1000000,所以我无法映射 getFrameNumber。

注意:我的 android 是为 Qualcomm 820 构建的 7.1.1 自定义操作系统。

0 投票
1 回答
1038 浏览

android - 为什么 Android 的 ImageReader 类这么慢?

我为 Android 3.4.1 的全新版本尝试了 OpenCV,JavaCamera2View但速度太慢(仅显示相机视图约 15fps)。当我尝试使用旧版本时JavaCameraView,它给了我很好的结果(~30fps,这是我相机的极限)。

我想知道 Camera2 版本为什么这么慢,并研究了实现。我注释掉了图像的所有处理和渲染(只是让相机绘制到内部ImageReader对象,然后使用acquireLastImage()方法读取它),它仍然是 15 fps。但是,当我将目标表面从ImageReader对象更改为视图本身的表面时,它突然给了我 30 fps。

所以问题是,为什么ImageReader上课这么慢?我的猜测是 ImageReader 正在从使用 OpenGL 的 Surface 读取图像,glReadPixels()这非常慢,因为它需要将图像从 GPU 内存传输到 CPU 内存(或者它可能正在等待 GPU 刷新?),但我不能一定要确定,因为ImageReader所做的一切都隐藏在本机代码中。

或者相反ImageReader很好,OpenCV 是否缺少某些东西?

我正在使用华硕 Zenfone 4 Max,Android 7.1.1。

0 投票
1 回答
797 浏览

android - Android 相机 2:ImageReader 的图像没有步幅值

我一直在尝试将图像从相机路由到 ImageReader,以便我可以直接使用 Camera2 API 操作图像。当我将捕获会话流传输到 SurfaceView 时,该流工作得很好。然后,当我将捕获会话流设置为 ImageReader 时,我注意到图像在某种程度上是无效的。

在我的 ImageReader 的 OnImageAvailable 回调函数中,我拉下一个可用的 Image 并尝试读取它。这就是我遇到问题的地方。图像不为空,并且平面在那里,但平面的缓冲区一开始是空的。当我尝试获取缓冲区时,它们突然不为空,但尝试从中读取会使应用程序崩溃而没有堆栈跟踪。此外,平面中的像素和行步长设置为 0。但是,图像的宽度和高度已正确设置。

因此,我认为我的 ImageReader 设置不正确。问题是我做错了什么?

代码:

0 投票
0 回答
882 浏览

android - 在没有 Camera2 API 的情况下将 ImageReader 表面用于视频流

我正在尝试将相机的视频流放入图像读取器表面,以便能够处理这些图像。我发现了很多处理 camera2 API 的示例,但我不使用它,因为我的视频流来自外部摄像头。

理想情况下,我将有两个表面:一个作为预览,另一个来自 ImageReader 来处理图像。与类似。我了解您将两个曲面与 aCaptureRequest.Builder和 then结合起来.addTarget(surface)。问题是我没有CamerDevice制作createCaptureRequest.

我使用的代码可以在这里找到。

我试图创建一个 ImageReader 及其表面并将其传递给startDecoding函数。但这并没有很好地工作,因为我收到了这个错误:

任何指向正确方向的提示都会很好!

更新1:

错误是由 的返回值引起的dequeueOutputBuffer,因为它的值为-1。根据 MediaCodec 上的文档,这意味着呼叫超时。但是为什么会这样呢?

更新 2

我没有surfaceCreated(因为我不再有 SurfaceView),所以代码移到了onCreate. 其他一切都和这里差不多

0 投票
1 回答
487 浏览

android - 在 Android 上处理使用 ImageReader 获得的图像

我从 ImageReader 接收图像,格式为 PixelFormat.RGBA_8888

我想要的是将该图像转换为 ARGB。

获取缓冲区很简单

但结果对我来说没有意义。这是一个 320x240 的图像,它应该有 320X240X32(RGBA_8888) 字节......但是 buffer.length 只有 307200 字节。

它还有striderow 1280和stridePixel 4,所以应该更大。

我知道我可能会问一个基本问题,但不幸的是我找不到任何关于此的信息或教程。

谢谢

0 投票
1 回答
1263 浏览

android - FirebaseVisionImageMetadata 的 ImageReader 格式兼容性(通过 Android 上的 Camera2 API)

我想使用 ImageReader 中的图像字节数组来构造一个FirebaseVisionImageMetadata用于条形码扫描的对象(作为ML Kit的一部分)。我正在使用 Camera2 API 并遵循此 PR来支持帧预览。

但是,当我将结果格式传递给FirebaseVisionImageMetadata构建器时,我收到以下错误:

我传递给的格式ImageReaderImageReader.YV12sinceFirebaseVisionImageMetadata只接受NV21or YV12,但由于ImageReader不接受NV21,我只剩下YV12. 当我使用这种格式(如上所示)时,相机会以黑屏启动。我也尝试过传入ImageReader.YUV_420_888,但结果相同IllegalArgumentExceptionfrom FirebaseVisionImageMetadata

我的猜测是我可能必须以不同的方式转换字节数组,或者转换为不同的格式(?)。

任何帮助,将不胜感激。

资料来源:

  1. https://github.com/google/cameraview/pull/123/commits/f90580b1891c3edf91b4a254219d08b01110afce
  2. https://developer.android.com/reference/android/graphics/ImageFormat.html?hl=BG#YUV_420_888
0 投票
3 回答
266 浏览

android - 找不到 Xamarin Android 的 PixelFormat 枚举

我有以下代码,我在 xamarin android 中创建 ImageReader 实例,如何将图像格式从更改ImageFormatType.Rgb565PixelFormat.RGBA_8888

我无法找到它的库或枚举类。