微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从Android摄像头捕获原始图像

takePicture rawCallback返回一个空指针. getPictureFormat只允许.jpg.虽然可以通过getParameters()setJpegQuality(100)setParameters来改进jpeg,但是返回的图像仍然是一个jpeg.要获取位图图像BitmapFactory.decodeByteArray需要调用,这可能需要1/2秒的时间来处理.

我正在工作的应用程序需要相机可以产生的最详细的图像,这不一定意味着漂亮.原始相机芯片捕获格式是拜耳.

解决方法

android(至少我的)有2个相机参数“rawsave-mode”和“rawfname”,认的rawsave-mode = 0.通过设置rawsave-mode = 1,相机将保存原始相机图像文件,以及照常执行其他相机功能.
Camera.Parameters parameters=preview.camera.getParameters();
parameters.set("rawsave-mode","1");
parameters.set("rawfname","/mnt/sdcard/test.raw");
preview.camera.setParameters(parameters);
preview.camera.takePicture(shutterCallback,null,jpegCallback);

生成文件的实际名称修改包括正在生成的原始文件的参数.对于我的一个机器人,产生的名称是“test__1604x1206_10_2.raw”,它是a1 1604×1206图像,10bit格式2.和“test__1284x966_10_3.raw”,它是1284×966图像,10位格式3. 10个字节存储为2个字节短int(小端).

parameters.set("rawsave-mode","2");
// setting the rawsave-mode to 2 increased the resolution to 3204x2406
// and output the file test__3204x2406_10_2.raw

图像数据大约为8位,但在10位内浮动,其中较亮的图像可能使用较高的值,并且较暗.这允许图像处理软件创建直方图并捕获图像的有用范围.因为光不是恒定的,所以也可能需要调整一个通道与另一个通道不同,以使图像看起来颜色正确.网络上有很多关于颜色理论的信息,可以充分解释这一点,但是新用户需要注意的是,10位到8位的转换速度很快.如果你想要一个漂亮的图片,使用Android图片捕获,而不是原始图像!

格式表示位的拜耳模式.拜耳是一种格式,其中行和列的奇数/偶数值表示像素表示哪种颜色,其中RGB对于每个像素的每个颜色通道具有8位值,拜耳对像素只有一个10位值,其中一个像素是红色,然后是下一个绿色,红色,绿色,绿色.那么下一行就有蓝色,蓝色,蓝绿色.要确定像素的RGB值需要解释周围​​的像素.

Format 2 has pixel order
//            0 1 2 3 4 5
//          0 G R G R G R
//          1 B G B G B G
//          2 G R G R G R
//          3 B G B G B G

格式3具有像素顺序

//            0 1 2 3 4 5
//          0 R G R G R G
//          1 G B G B G B
//          2 R G R G R G
//          3 G B G B G B

我不知道这种技术是否适用于其他机器人,或者它将在未来的机器人上工作.如果有人尝试这个,请添加一个关于成功或失败的评论.我的手机是直接中国进口解锁iHTC Android手机已经扎根.

原文地址:https://www.jb51.cc/android/310337.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐