我正在尝试使用opencv将视频设置为全屏。输入来自相机。 它显示在屏幕中央但不是全屏。 相关代码:
public class Sample3Native extends Activity implements CvCameraViewListener {
private static final String TAG = "OCVSample::Activity";
private Mat mRgba;
private Mat mGrayMat;
private Mat mFinalMat;
private CameraBridgeViewBase mOpenCvCameraView;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
// Load native library after(!) OpenCV initialization
System.loadLibrary("native_sample");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
public Sample3Native() {
Log.i(TAG, "Instantiated new " + this.getClass());
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "called onCreate");
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.tutorial3_surface_view);
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial4_activity_surface_view);
mOpenCvCameraView.setCvCameraViewListener(this);
}
我尝试过使用:
//mOpenCvCameraView.setScaleX(0.8f);
// mOpenCvCameraView.setScaleY(0.4f);
//mOpenCvCameraView.setMinimumHeight(800);
// mOpenCvCameraView.setMinimumWidth(1000);
但它不起作用。
如何拉伸帧以填满所有屏幕?
答案 0 :(得分:4)
您可以手动获取可用分辨率或设置的列表。
如果您想获得可用尺寸列表并获得最佳相机尺寸。
if (mOpenCvCameraView != null) {
List<Size> sizes = mOpenCvCameraView.getSupportedPreviewSizes();
int mFrameWidth = width;
int mFrameHeight = height;
// selecting optimal camera size
{
double minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - height) < minDiff) {
mFrameWidth = (int) size.width;
mFrameHeight = (int) size.height;
minDiff = Math.abs(size.height - height);
}
}
}
mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, mFrameWidth);
mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, mFrameHeight);
}
如果最佳相机尺寸不是全屏,则很容易从列表中获得相机支持的大尺寸。
其他选项是手动设置大小:
mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1000);
mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 800);
代码来源于Face Detection OpenCV 2.4.2版。
答案 1 :(得分:2)
对于那些谷歌的人,只想改变分辨率,
mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1000)
方法无效。
尝试使用mOpenCvCameraView.setMaxFrameSize(640, 480);
适用于 OCV4Android2.4.5,教程2,混合处理。
答案 2 :(得分:1)
对于仍在寻找此问题的人,我已经解决了这个问题(排序)。我似乎无法让这个适用于OpenCV v 2.4.3。我在互联网上尝试了一切。但是,在OpenCV 2.4.3.2中,他们添加了一种设置摄像头大小的方法
disconnectCamera();
mMaxHeight = //your desired height
mMaxWidth = //your desired width
connectCamera(mMaxWidth, mMaxHeight);
查看OpenCV教程5,特别是SampleJavaCameraView - &gt; setResolution方法
答案 3 :(得分:0)
不是最佳解决方案,但您可以转到AndroidManifest.xml
并设置android:screenOrientation="landscape"
使用此功能,您无需将相机旋转90º,但您的应用程序将始终处于横向模式。
答案 4 :(得分:0)
OpenCV摄像机的自然摄像机方向为横向,因此使您的活动像
android:screenOrientation="landscape"
并在“活动”中应用此主题
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
...
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
此技巧可为您提供全屏摄像头。
答案 5 :(得分:-1)
尝试此替换
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
使用
创建onCreate中的代码getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);