1. 程式人生 > >SurfaceView+Camera+OpenCv自定義相機儲存圖片

SurfaceView+Camera+OpenCv自定義相機儲存圖片

至於如何在專案中如何新增OpenCv的SDK在此不再贅述:我引入的OpenCv-SDK版本為OpenCV-3.1.0-android-sdk

在Activity中實現CameraBridgeViewBase.CvCameraViewListener2介面並重寫其方法,在

Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)方法中可以使用OpenCv的儲存圖片的方法,如下:
Imgcodecs.imwrite("/storage/emulated/0/" + "OpenCvimwrite.jpg", inputFrame.rgba());
方法引數為:1.圖片名稱(包括路徑)2.Mat型別的資料
注:此方法儲存的圖片解析度和預覽解析度相同(即Camera的PreviewSize屬性)
另外此圖片可能比較模糊,通過檢視JavaCameraView類中的Boolean initializeCamera(int width,int height)方法發現有以下兩行程式碼:
    int size = mFrameWidth * mFrameHeight;
    size  = size * ImageFormat.getBitsPerPixel(params.getPreviewFormat()) / 8;
將size改為
    size = size * ImageFormat.getBitsPerPixel(params.getPreviewFormat());
照片的效果會稍微好一點。
下面切入主題,新增儲存照片的方法:
在JavaCameraView類中新增方法:
public void tackPhoto(final String name) {
        if (mCamera != null) {
            mCamera.takePicture(null, null, new Camera.PictureCallback() {
                @Override
                public void onPictureTaken(byte[] data, Camera camera) {
                    Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                    saveMyBitmap(bmp, name);
                }
            });
        }
 public void saveMyBitmap(Bitmap mBitmap, String photoName) {
        if (isMediaMounted()) {
            String SDCardPath = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
            createFileDir(SDCardPath + File.separator + "OpenCv");
            String FilePath = SDCardPath + File.separator + "OpenCv" + File.separator + photoName + ".jpg";
            File file = new File(FilePath);
//        "/storage/emulated/0/OpenCv" + "OpenCv.jpg",
            BufferedOutputStream bos = null;
            try {
                FileOutputStream fos = new FileOutputStream(file);
                bos = new BufferedOutputStream(fos);
                mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
                bos.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (mBitmap != null) {
                        mBitmap.recycle();
                    }
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } else {
            Log.e(TAG, "saveMyBitmap: 沒有掛載記憶體卡,無法儲存圖片");
        }
    }

 /**
     * SD卡是否掛載
     *
     * @return
     */
    public static boolean isMediaMounted() {
        String status = Environment.getExternalStorageState();
        if (status.equals(Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

這樣在Activity中就可以呼叫JavaCameraView的tackPhoto()方法拍照了。




相關推薦

SurfaceView+Camera+OpenCv定義相機儲存圖片

至於如何在專案中如何新增OpenCv的SDK在此不再贅述:我引入的OpenCv-SDK版本為OpenCV-3.1.0-android-sdk 在Activity中實現CameraBridgeViewBase.CvCameraViewListener2介面並重寫其方法,在 M

安卓開發之定義相機圖片變形問題

在開發的過程中哦鞥到了一個在預覽的時候預覽中的圖片一直在變形,所以在網上查了一個方法,記錄下來: 首先是要獲取一個最適合的預覽尺寸 /** * 通過對比得到與寬高比最接近的

Android 定義相機 Camera 圖片方向問題

相機預覽方向問題 對於相機的預覽方向我們可以通過如下API進行設定 camera.setDisplayOrientation(0);但是,該API影響的是相機的預覽方向,對於照片的儲存方向並沒有什麼影響,最終照片儲存的方向還是由Camera的影象Sensor決定的。 照片儲

開發Android Camera—使用Kotlin語言,完成第一個定義相機

對於首次使用Kotlin語言開發,在網上苦於尋找不到Kotlin語言編寫的相機程式碼,故寫下這篇部落格。 好了,咱們進入主題 在Android 5.0(SDK 21)中,Google使用Camera2替代了Camera介面。Camera2在介面和架構上做了巨大的變動,但是基於眾所周知的原

Android定義相機Camera(一)

Time:2018/06/21  因為專案需求,需要實現跟小猿搜題的類似的功能,系統相機直接就被排除了,原本打算是找個一個demo,改吧改吧就直接用了,找的過程中發現程式碼太舊了,目前6.0以上的系統很多不支援,然後按照demo的邏輯,就寫一個相

Android SurfaceView 定義相機

  時間過的真快,轉眼就要到五一假期,在這裡提前祝大家五一快樂;今天有時間,簡單的寫點最近專案中遇到的坑。具體程式碼我會貼出來,我就不放在GitHub上了,有感興趣的可以去 我的部落格地址 www.softwareboy.com.cn 雖然很醜,但是實

Android呼叫系統相機定義相機、處理大圖片

Android呼叫系統相機和自定義相機例項 本博文主要是介紹了android上使用相機進行拍照並顯示的兩種方式,並且由於涉及到要把拍到 的照片顯示出來,該例子也會涉及到Android載入大圖片時候的處理(避免OOM),還有簡要提一下有些人SurfaceView出現黑屏的原因。 An

簡單談談android定義相機的實現(上 android.hardware.Camera

通常情況下,呼叫android系統相機基本上可以滿足拍照的需求,而自定義相機的需求一般來自於開發自己的相機應用,今天我們來簡單聊聊android自定義相機的實現,限於篇幅,我們上篇只討論android.hardware.Camera,下篇我會和大家一起討論一下a

SurfaceView 定義相機開發

Surfaceview 自定義相機,支援解析度修改,開關閃光燈,可以切換前後攝像頭,拍攝完成存為圖片,先上效果圖: MainActicity.java private Camera camera;     private boolean preview = fal

android 定義相機Camera

專案中,有時系統的相機不能滿足我們的需求,例如:實現美圖,這樣就需要我們進行自定義相機,滿足我們的特殊需求。Android給我們提供了Camera API,可以進行相機的私人訂製。在Android5以後有提供了Camera2 API,廢除了Camera API。但Camera

Android定義相機超詳細講解

了解 catch 實現 4.4 required form 需要 eset 自己 Android自定義相機超詳細講解 轉載請標明出處: http://blog.csdn.net/vinicolor/article/details/49642861; 由於網上關於Andr

android用camera2api定義相機

stream javaweb asp ner servle android avast andro 自定義 js%E5%9F%BA%E7%A1%80%E4%BD%9C%E7%94%A8%E5%9F%9F%E5%92%8C%E9%97%AD%E5%8C%85 javastr

iOS開發筆記17:定義相機拍照

hub 銷毀 用戶 做了 api 交互設計 cap iphone 結果 之前用AVFoundation自定義相機做了拍照與視頻相關的東西,為什麽要自定義呢?主要是提供更個性化的交互設計,符合app主題,對於視頻來說,也便於提供更多豐富有趣的功能。前段時間整理了下拍照部分的功

Android 定義控件——圖片剪裁

ets nis anti none span out pro int() mat 如圖: 思路:在一個自定義View上繪制一張圖片(參照前面提到的另一篇文章),在該自定義View上繪制一個自定義的FloatDrawable,也就是圖中的浮層。繪制圖片和FloatDra

Enjoy! 多達400多萬的動態搞笑,愛情,友情。。。。表情下載 表情表情定義表情表情圖片下載 定義QQ表情使用方法完全圖解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

定義水波擴散圖片

公司產品需要一個按鈕有一個水波紋擴散的效果,就簡單的做了一個。先上圖 然後就是原始碼了,程式碼很簡單 我就不解釋了,就是想留著做個紀念 package com.example.administrator.myapplication.view; import android.an

iOS開發-定義後臺顯示圖片 iOS7-Background Fetch的應用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android實現定義相機效果

樓主在進行android開發時用到了自定義攝像頭拍照並將所拍攝的照片轉化成二進位制流輸出這一功能(當然程式裡也附帶將圖片儲存在sd卡里的功能),花了好多天的時間查了很多資料最後終於把它給搞出來了。。。 來~~~直接上圖~~~ 首先先搞出界面佈局來 <?xml version=

pytorch—ImageFolder/定義類 讀取圖片資料—Transform資料轉換

文章目錄 一、torchvision 影象資料讀取 [0, 1] 二、torchvision 的 Transform 三、讀取影象資料類 3.1 class torchvision.d

Kotlin實現SurfaceView+MediaPlayer封裝定義視訊播放功能

1、前言 視訊播放功能在APP開發中有的會用到這個功能,實現視訊播放三種方式 (1)系統自帶的視訊播放器 (2)VideoView播放器(自帶開始、停止、暫停等功能,進度條自帶不能改變),實現起來較簡單 (3)SurfaceView+MediaPlayer實現播放器(Surfac