如何在OpenCV中设置Android的摄像头分辨率?

我正在尝试为Android开发一个应用程序,并且需要使用相机尽可能高的分辨率来获取未压缩的图片。 我试图takePicture的rawCallback和postviewCallback,但他们不工作。

现在,我正在尝试使用VideoCapture的OpenCV(版本2.4),但我卡在默认的960×720,这是我所需要的穷人; 而我的手机,三星Galaxy S3,理论上能够提供高达8Mpx(根据维基百科,图片为3264×2448,video为1920×1080)。 VideoCapture.set(Highgui.CV_CAP_PROP_FRAME_WIDTH / HEIGHT,某个数字)使得相机返回一个黑色的图像,据我所知。

有没有办法通过OpenCV或Android API获得更高的分辨率,而无需压缩?

如果之前已经问过,我真的很抱歉; 我一直在寻找天,我什么都没有find。

感谢您的时间!

编辑:虽然它不完全是我问的,我发现有一种方法来做非常类似的事情:如果你设置一个摄像头的OnPreviewCallback,使用setPreviewCallback,你从相机获取原始图片数据(至less在S3我正在与)。 我留在这里,以防有人在将来发现它有用。

编辑:部分解决scheme在下面的答案中解释。 总结一下,

vc.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, desiredFrameWidth); vc.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, desiredFrameHeight); 

在某些条件下工作; 请参阅下面的进一步细节。

Solutions Collecting From Web of "如何在OpenCV中设置Android的摄像头分辨率?"

您必须通过调用getSupportedPreviewSizes来获得支持的相机预览。

在此之后,您可以使用setPreviewSize方法设置任何分辨率。 最后不要忘记setParameters 。 实际上很多OpenCV的Android例子都包含这些信息(请看sample3)。

如果有人发现这个有用的,我发现(部分)的解决scheme:如果你的VideoCapturevariables被称为VC,这应该工作:

 vc.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, desiredFrameWidth); vc.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, desiredFrameHeight); 

请注意,宽度和高度的组合必须是您的相机支持的图片格式之一,否则它只会得到一个黑色的图像。 你可以通过Camera.Parameters.getSupportedPictureSizes()来获得这些。

但是,设置高分辨率似乎超过了YUV转换缓冲区的容量,所以我仍然在为此而苦苦挣扎。 我将为此做一个新的单独的问题,以保持一切更清晰: 新线程

setPreviewSize不设置图片分辨率。 setPictureSize呢。