赞
踩
我的Android项目中用到了opencv的人脸识别,所以把opencv的部分内容集成到自己项目中,用JavaCameraView这个类来预览摄像头捕捉到的内容,问题出现了,我的JavaCameraView这个控件在布局中设置的尺寸很大,但是,却只在中间一个比较小的区域有预览画面,四周为黑色填充,我想让它全屏显示,或者接近全屏显示。
经过查看代码,在JavaCameraView类中,有initializeCamera这个方法,这个方法中有尺寸的设置
protected boolean initializeCamera(int width, int height) {
...
//获得到设备支持的尺寸
List<android.hardware.Camera.Size> sizes = params.getSupportedPreviewSizes();
if (sizes != null) {
//打印支持的尺寸
for (int i = 0; i < sizes.size(); i++) {
Log.e("WillWolf", "width-->" + sizes.get(i).width + " height-->" + sizes.get(i).height);
}
/* Select the size that fits surface considering maximum size allowed */
//这里通过父类的一个计算方式,得到一个opencv认为最合适的尺寸
Size frameSize = calculateCameraFrameSize(sizes, new JavaCameraSizeAccessor(), width, height);
...
Log.d(TAG, "Set preview size to " + Integer.valueOf((int)frameSize.width) + "x" + Integer.valueOf((int)frameSize.height));
// params.setPreviewSize((int)frameSize.width, (int)frameSize.height);
//WillWolf 设置预览界面大小尺寸
params.setPreviewSize(640, 480);
...
}
12-26 09:26:44.012 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->176 height-->144
12-26 09:26:44.012 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->320 height-->240
12-26 09:26:44.012 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->352 height-->288
12-26 09:26:44.012 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->480 height-->320
12-26 09:26:44.012 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->480 height-->368
12-26 09:26:44.012 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->640 height-->480
12-26 09:26:44.013 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->720 height-->480
12-26 09:26:44.015 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->800 height-->480
12-26 09:26:44.015 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->800 height-->600
12-26 09:26:44.016 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->864 height-->480
12-26 09:26:44.016 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->960 height-->540
12-26 09:26:44.016 13868-13868/com.sdses.onlinecheck E/WillWolf: width-->1280 height-->720
这块代码的功能是寻找一个合适的尺寸,并设置为预览尺寸,但是,我将sizes这个集合打印出来,里面有好多支持的尺寸,但是我的设备选了一个比较小的尺寸,所以,我手动改成众多支持中的尺寸的一个,640*480,效果还不错,希望可以帮助到大家。
值得注意的是,openCV默认是横屏,也就是说,我们的设备的宽,在openCV中是高。因为,我获取设备的属性,是宽为720px,高为1280px。我在一款横屏类似pad的设备上设置尺寸,可以几乎为全屏,我在一款手机(720px * 1280px)上,设置openCV宽为1280,高为720,手机的宽可以占满全屏,高会有一部分黑色空隙,不知道是不是因为宽高伸缩比例的原因。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。