[Android] Android Stutio OPENCV 啟動相機預覽

更新 發佈閱讀 12 分鐘


關於Android OPENCV安裝篇請參考:

Android Studio OPENCV 安裝步驟

 

新增相機拍照權限以及相機橫向展示還有自動對焦

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

示範

XML

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<org.opencv.android.JavaCameraView
android:id="@+id/java_camera_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</android.support.constraint.ConstraintLayout>

JAVA

public class focus extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{
JavaCameraView javaCameraView;
static String TAG="MainActivity";
Mat mRgba,input,imgGray;

private MTCameraView mOpenCvCameraView;

BaseLoaderCallback mLoaderCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
super.onManagerConnected(status);
switch (status){
case BaseLoaderCallback.SUCCESS:{
javaCameraView.enableView();
break;
}
default:{
super.onManagerConnected(status);
break;
}
}
}
};
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.focus);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//螢幕保持橫向
javaCameraView = (JavaCameraView)findViewById(R.id.java_camera_view);
javaCameraView.setCvCameraViewListener(this);
javaCameraView.setFocusable(true);
javaCameraView.enableView();
}
//取得手機螢幕控制
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION //影藏狀態欄和標題欄
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //全頻顯示
| View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); //影藏手機虛擬按鍵HOME/BACK/LIST
}
}
synchronized void start() {
try {
} catch (RuntimeException re) {
Log.w(TAG, "Unexpected exception while focusing", re);
}
}
@Override
protected void onPause(){
super.onPause();
if(javaCameraView!=null)
javaCameraView.disableView();
}
@Override
protected void onDestroy(){
super.onDestroy();
if(javaCameraView!=null)
javaCameraView.disableView();
}
@Override
protected void onResume(){
super.onResume();
if (OpenCVLoader.initDebug()){
Log.i(TAG,"TRUE");
mLoaderCallBack.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}else {
Log.i(TAG,"FALSE");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0,this,mLoaderCallBack);
}
}
@Override
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat(height,width, CvType.CV_8UC4);
imgGray = new Mat(height,width, CvType.CV_8UC1);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
input = inputFrame.gray();
Imgproc.cvtColor(mRgba,imgGray,Imgproc.COLOR_RGB2GRAY);
return mRgba;
}
}

 

展示

raw-image


相關文章:

[Android] Android 程式設計教學

本網站https://kk665403.pixnet.net/內之全部圖文,Saioyan梟夜所有,非經本人同意不得將全部或部分內容轉載於任何形式之媒體
Copyright © 2021 Saioyan. All rights reserved.
版權所有© 2021 Saioyan梟夜

留言
avatar-img
Saioyan的沙龍
35會員
919內容數
贊助我 https://vocus.cc/pay/donate/@kk665403?donateSourceType=exclusiveLink
Saioyan的沙龍的其他內容
2018/07/30
示範 XML <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android
Thumbnail
2018/07/30
示範 XML <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android
Thumbnail
2018/07/30
示範 XML <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android
2018/07/30
示範 XML <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android
2018/07/30
TextView 屬性說明 android:marqueeRepeatLimit="-1" 跑馬燈的循環次數,-1表示無限循環。 android:singleLine="true" 指定TextView以單行顯示。 android:focusableInTouchMode="true" 指定在觸
Thumbnail
2018/07/30
TextView 屬性說明 android:marqueeRepeatLimit="-1" 跑馬燈的循環次數,-1表示無限循環。 android:singleLine="true" 指定TextView以單行顯示。 android:focusableInTouchMode="true" 指定在觸
Thumbnail
看更多