国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android Studio開發(fā)之路(七)CameraX&&Opencv的使用

這篇具有很好參考價值的文章主要介紹了Android Studio開發(fā)之路(七)CameraX&&Opencv的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、前情提要以及工作目標

工作目標:做一個顯示單通道圖像的相機,實現(xiàn)預覽和拍照。
原本是調用opencv-android里邊的JavaCamera2View來實現(xiàn),這個用起來比較方便,它提供了集成好的相機預覽界面,并且提供了幀處理函數(shù)。但是問題是用opencv相機獲取到的幀圖片分辨率不高,達不到目標效果。
而CameraX作為Google發(fā)行的相機處理庫,可以方便的做分辨率設置、對焦等操作,于是決定使用Camerax+opencv的方式完成工作目標。

二、CameraX基礎

CameraX
Camerax(Android developer)
Camerax發(fā)布會(谷歌中國)
Camerax入門指南

三、工作幾大難點以及解決方案

(1). 開發(fā)語言與版本

CameraX主流語言是Kotlin, 網上帖子用的也大多是Kotlin,而我使用的是Java
并且Camerax目前為止發(fā)行了不少的版本,還分了alpha,beta版本,不同的版本代碼頁不完全兼容。Java開發(fā)盡可能選擇比較新的版本
Android CameraX 1.1.0 Java版本使用教程(Java)

(2). ImageProxy對象轉Mat

CameraX將相機應用的主流場景分成三個“用例”,每個用例都可以單獨使用:
預覽:將相機捕獲的畫面顯示在屏幕上,PreviewView
拍照:拍攝保存圖片
分析ImageAnalysis:提供每一幀圖像用于處理。
分析用例提供的是 ImageProxy對象,幀圖片是YUV類型,但是opencv處理的是Mat,所以需要進行轉換,可參考這篇文章:
YUV轉Mat

(3).圖片處理后的再顯示

我需要將每一幀處理后的圖像想普通相機那樣再顯示在界面上,但是CameraX的分析用例沒有提供返回,而且要將mat再轉回也比較麻煩,所以普遍的方式是在預覽界面的上面再疊放一個ImageView,每處理一幀就用ImageView顯示出來。(根據我的目標,我只要顯示處理之后的幀,所以我干脆沒有使用預覽用例)。

這里還要注意顯示的大小。我的ImageAnalysis分辨率設置的是1280x720, 顯示出來是不能占滿屏幕的,那么就有兩種處理方式:

1.使用ImageView的縮放設置setScaleType

ScaleType縮放設置

2.使用opencv的resize()函數(shù)

CameraX的預覽用例官方文檔中給出了預覽時的縮放規(guī)則,我仿照這個規(guī)則使用resize函數(shù)將負片進行縮放,并且ImageView縮放類型設置為Center
CameraX預覽用例

    private class MyAnalyzer implements ImageAnalysis.Analyzer {
        @SuppressLint("UnsafeOptInUsageError")
        @Override
        public void analyze(@NonNull ImageProxy image) {
            Log.d(TAG, "Image's stamp is " + Objects.requireNonNull(image.getImage()).getTimestamp());
            Image img = image.getImage();

            int rotation = image.getImageInfo().getRotationDegrees();

            //在opencv的JavaCamera2View.java中添加了ImageUtil類,用于YUV類型到mat的圖片轉換
            ImageUtil imgutil = new ImageUtil(img);
            Mat rgb = imgutil.rgba();
            imgutil.rotation(rotation, rgb);    //圖片旋轉

            mChannelB = new Mat(rgb.height(), rgb.width(), CvType.CV_8UC1);
            //clahe 用于進行圖像邊緣增強對比度
            CLAHE clahe = createCLAHE();
            clahe.setClipLimit(8);
            clahe.setTilesGridSize(new Size(8, 8));
            //通道拆分,僅顯示單通道圖像
            List<Mat> imgList = new ArrayList<Mat>();
            Core.split(rgb, imgList);
            clahe.apply(imgList.get(2), mChannelB);

            //獲取屏幕尺寸
            DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            int width = displayMetrics.widthPixels;
            int height = displayMetrics.heightPixels;
            double mu=Math.max(mlay.getWidth()*1.0/mChannelB.width(),mlay.getHeight()*1.0/mChannelB.height());

            Mat reRgb=new Mat();
            resize(mChannelB,reRgb,new Size(0,0),mu,mu,INTER_CUBIC);

            Bitmap bitmap = Bitmap.createBitmap(reRgb.width(), reRgb.height(), Bitmap.Config.ARGB_8888);
            Utils.matToBitmap(reRgb,bitmap);

            //TODO 處理我們要對Mat做的業(yè)務計算
            imgutil.release(); //要釋放資源哦


            //  Toast.makeText(MainActivity.this,"mChannelB size:"+mChannelB.width()+";"+mChannelB.height(),Toast.LENGTH_SHORT).show();
         /*   String path= Environment.getExternalStorageDirectory()+"/DCIM/Camera/";
            //將拍攝準確時間作為文件名
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
            String filename = sdf.format(new Date());
            String filePath= path  + filename + ".jpg";
            Imgcodecs.imwrite(filePath, mChannelB);
*/

            image.close();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    m_imageView.setImageBitmap(bitmap);
                    String size=mlay.getWidth()+"/"+mlay.getHeight()+";"+bitmap.getWidth()+"/"+bitmap.getHeight()+";"+m_imageView.getWidth()+"/"+m_imageView.getHeight()+";"+reRgb.width()+"/"+reRgb.height()+";mu:"+mu;
                    m_textView.setText(size);
                    //  Toast.makeText(MainActivity.this,"imageview size:"+m_imageView.getWidth()+";"+m_imageView.getHeight(),Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

Android Studio開發(fā)之路(七)CameraX&&Opencv的使用,Android Studio開發(fā)之路,android studio,opencv,android文章來源地址http://www.zghlxwxcb.cn/news/detail-811415.html

到了這里,關于Android Studio開發(fā)之路(七)CameraX&&Opencv的使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 學習筆記—Android studio導入OpenCV配置使用

    學習筆記—Android studio導入OpenCV配置使用

    官網下載sdk,打開opencv官網,點擊Android,完成后解壓 https://opencv.org/ 解壓后,文件夾下有這些文件 samples Android代碼工程 sdk 包含opencv的Java的接口和JNI接口等 打開Android studio,選擇模板,這時選擇最后一項Native C++,然后進入配置界面。 這里注意你下載的Android-sdk版本來選擇

    2024年02月07日
    瀏覽(22)
  • Android CameraX適配Android13的踩坑之路

    Android CameraX適配Android13的踩坑之路

    最近把AGP插件升級到8.1.0,新建項目的時候目標版本和編譯版本都是33,發(fā)現(xiàn)之前的demo使用Camerax拍照和錄像都失敗了,于是查看了一下官網和各種資料,找到了Android13的適配方案. 與早期版本一樣,Android 13 包含一些行為變更,這些變更可能會影響您的應用。以下行為變更僅影

    2024年02月12日
    瀏覽(26)
  • Android studio 使用C/C++開發(fā)app

    Android studio 使用C/C++開發(fā)app

    一、在新建項目中選擇Native C++,然后下一步 二、名字跟保存位置自定義,語言選擇Java,SDK根據app安裝的平臺選擇對應的版本,選好后下一步 ?三、C++ Standard默認選擇就可以,點擊完成 ?四、加載完成后,把項目標題Android換成項目 ?換完后的列表 ? ?C/C++的代碼在cpp文件夾中

    2024年02月12日
    瀏覽(26)
  • Android Studio中使用cmake開發(fā)JNI實戰(zhàn)

    Android Studio中使用cmake開發(fā)JNI實戰(zhàn)

    JNI學習大綱 一、JNI編程入門 二、Android Studio中使用cmake開發(fā)JNI實戰(zhàn) 第一章節(jié)我們介紹了JNI的開發(fā)步驟,那這一章節(jié)我們就開始在Android Studio中實戰(zhàn)一下吧,Let\\\'s Start。 AS中菜單欄選擇ToolsSDK Manager 在Android SDK中選擇SDK Tools,安裝CMake和NDK。 在項目工程下的src/main創(chuàng)建cpp目錄,編

    2024年02月14日
    瀏覽(25)
  • Android Camera開發(fā)入門(3):CameraX的使用

    CameraX API簡介 在前兩篇博客中,我們介紹了Camera基礎知識和Camera2 API的使用。為了進一步簡化相機應用開發(fā),Google推出了CameraX API,它提供了一個更加簡潔、易于使用的接口,幫助開發(fā)者快速實現(xiàn)高質量的相機功能。本篇博客將帶領你了解CameraX的使用方法,并提供相應的示例

    2024年02月11日
    瀏覽(19)
  • 【常用開發(fā)工具】保姆級教程Android Studio安裝和基本使用

    【常用開發(fā)工具】保姆級教程Android Studio安裝和基本使用

    ??這里是【常用開發(fā)工具】,關注我學習編程不迷路 如果對你有幫助,給博主一個免費的點贊??以示鼓勵 歡迎各位??點贊??評論收藏?? ??專欄介紹 【常用開發(fā)工具】 目前更新IDEA、Tomcat、Maven、Git等預計會開10+期,大家一起學習一起進步。 ????有寫的不好或寫錯的地

    2023年04月16日
    瀏覽(96)
  • 移動開發(fā)作業(yè)三:使用Android studio來實現(xiàn)簡單的計算器

    移動開發(fā)作業(yè)三:使用Android studio來實現(xiàn)簡單的計算器

    一.實驗要求 結合所學內容利用Android studio來設計一個開發(fā)實例,這里去我選擇做一個簡易的計算器,可以初步實現(xiàn)加減乘除。 二.實驗功能 該計算器與我們平常手機上的計算器一樣,可以進行加減乘除操作。 三.實驗過程 1.首先是關于計算器的布局 在layout文件下的drawable文件

    2024年02月02日
    瀏覽(93)
  • 安卓大作業(yè):使用Android Studio開發(fā)天氣預報APP(使用sqlite數(shù)據庫)

    安卓大作業(yè):使用Android Studio開發(fā)天氣預報APP(使用sqlite數(shù)據庫)

    今天我來分享一下如何使用Android Studio開發(fā)一個天氣預報APP。在文中,我們將使用第三方接口獲取實時天氣數(shù)據,并顯示在APP界面上。 首先,打開Android Studio并創(chuàng)建一個新的項目。在創(chuàng)建新項目時,我們需要設置項目名稱、包名和支持的最低API級別。 為了獲取實時天氣數(shù)據,

    2024年02月08日
    瀏覽(31)
  • Android studio實現(xiàn)財務記賬系統(tǒng)軟件android studio開發(fā)課程設計

    Android studio實現(xiàn)財務記賬系統(tǒng)軟件android studio開發(fā)課程設計

    Android 開發(fā)一個理財記賬系統(tǒng)軟件(app)的詳細實驗步驟,內附有源碼,小白也能輕松上手自己的軟件開發(fā)項目學生可當課程設計學習使用。 系統(tǒng)登錄/退出 設置/修改密碼 主活動頁面設計 增加收入記錄頁面 查看收入記錄頁面 修改和刪除記錄頁面 1、實驗名稱 數(shù)據庫的創(chuàng)建 2.

    2024年02月10日
    瀏覽(28)
  • OpenCV(一):Android studio jni配置OpenCV(親測有效,保姆級)

    OpenCV(一):Android studio jni配置OpenCV(親測有效,保姆級)

    目錄 1.下載OpenCV的SDK 2.創(chuàng)建Android Native C++項目 3.Android項目中導入OpenCV工程 4.導入OpenCV的庫文件 5.實現(xiàn)opencv高斯模糊圖像處理的demo 要在Android Studio中配置使用OpenCV庫的C++方法,需要完成以下步驟: 1.下載OpenCV的SDK 首先,您可以從OpenCV官方網站(Releases - OpenCV )下載適用于And

    2024年02月03日
    瀏覽(46)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包