Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实时图像处理Android camera2 api_Android_Image Processing_Renderscript_Android Camera2 - Fatal编程技术网

实时图像处理Android camera2 api

实时图像处理Android camera2 api,android,image-processing,renderscript,android-camera2,Android,Image Processing,Renderscript,Android Camera2,我对安卓非常陌生。我正在尝试使用新的Android Camera2 api构建一个实时图像处理应用程序。我的应用程序还需要保持良好的FPS速率。下面是一些示例,我设法在ImageReader类可用的onImageAvailable(ImageReader)方法中进行了图像处理。然而,通过这样做,我只能设法获得大约5-7fps的帧速率 我已经看到,建议使用RenderScript对Android camera2 api进行YUV处理。使用RenderScript会让我获得更高的FPS速率吗? 如果

我对安卓非常陌生。我正在尝试使用新的Android Camera2 api构建一个实时图像处理应用程序。我的应用程序还需要保持良好的FPS速率。下面是一些示例,我设法在ImageReader类可用的onImageAvailable(ImageReader)方法中进行了图像处理。然而,通过这样做,我只能设法获得大约5-7fps的帧速率

我已经看到,建议使用RenderScript对Android camera2 api进行YUV处理。使用RenderScript会让我获得更高的FPS速率吗?
如果是这样,请有人指导我如何实现它,因为我是android新手,我很难掌握分配和RenderScript的概念。提前谢谢

我不知道您想要执行什么类型的图像处理。但如果您只对图像的强度感兴趣(即灰度值信息),则不需要对YUV数据数组进行任何转换(例如转换为jpeg)。对于由n个像素组成的图像,强度信息由YUV数据数组的前n个字节给出。因此,只需从YUV数据数组中删除这些字节:

 byte[] intensity = new byte[width*height];
 intensity = Arrays.copyOfRange(data, 0, width*height);

理论上,您可以通过此调用获得可用的fps范围:

characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
并在此处设置所需的fps范围:

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, bestFPSRange);
因此,原则上,您应该选择一个具有相同下限和上限的范围,并且应该保持帧速率恒定

然而,在具有传统配置文件的设备上,我测试过的所有设备都无法在1080p时达到30fps(S5、Z3 Compact、华为Mate S和HTC One M9)。我能做到这一点的唯一方法是使用一个设备(LG G4),结果证明它有一个完整的配置文件

如果您打算在
onImageAvailable
回调中使用Renderscript,它将不会在这里为您购买任何东西。在这一点上获取图像似乎是传统设备上的瓶颈,因为新的camera2 API只是简单地包装了旧的camera2 API,并且可能会产生太多的开销,以至于回调不再以30fps的速度发生。因此,如果要使用Renderscript,您需要创建一个曲面,并找到另一种从中获取帧的方法


这是踢球的人。。。如果您将不推荐使用的API向后移动,我几乎可以保证以您想要的任何分辨率以30fps的速度运行。至少我在测试的所有设备上都发现了这一点

谢谢你的回复。我只对图像的强度感兴趣,我使用的是你提到的方法。然而,我现在正在使用android.media.ImageReader。我的应用程序的FPS率很低,大约为5-7。我想知道使用RenderScript是否能够实现更高的FPS速率。我还没有研究Camera2,但由于我的应用程序使用的是旧相机,我需要尽快完成这项工作。使用旧摄像头,我可以创建预览回调,其速率比您描述的5-7要高得多,必须大约为每秒20-30次。因此,我的猜测是,您应该使用预览,而不是实际图片。从我在SO中看到的情况来看,Camera2中的预览机制与setRepeatingRequest的CaptureRequest.Builder相关联,例如,请参见此处。至于Renderscript(我经常使用),我非常确定这本身无法提高帧速率,这毫无意义。但您可以将其用于图像的后处理。但我同意,至少可以说,文档是非常不直观的。感谢您提供的信息性回复。我能够获得更高的FPS速率,降低分辨率。对于我的应用来说,低分辨率就足够了,使用最低分辨率的相机,我可以获得30 FPS左右的分辨率。现在我需要做的是找到一种固定帧速率的方法。谢谢你的帮助。这很有帮助。我正在尝试做一些类似的事情,只针对旧的糟糕的安卓平板电脑。我不知道我在做什么,因为我以前从未玩过Camera(或Camera2)api。有没有可能你有一些样本代码放在周围,我可以看看?