Android開發(51) 網路攝影機自動對焦。在OpenCVImage Recognition中連續拍照時自動對焦和拍照。

來源:互聯網
上載者:User

標籤:

概述

  對焦,這裡所說的“焦”是指“焦距”。在拍照時,一定是需要調焦的。一般會在目標位置最清晰的時候會停止對焦。最近在處理OpenCV進行Image Recognition時,需要連續的調焦(對焦),並在對焦完成後進行拍照,擷取圖片後進行Image Recognition。識別完成後網路攝影機不關閉繼續進行掃描識別。整理成本文。

概念
焦距,也稱為焦長,是光學系統中衡量光的聚集或發散的度量方式,指從透鏡中心到光聚集之焦點的距離。亦是照相機中,從鏡片光學中心到底片、CCD或CMOS等成像平面的距離。具有短焦距的光學系統比長焦距的光學系統有更佳聚集光的能力。相機的鏡頭是一組透鏡,當平行於主光軸的光線穿過透鏡時,光會聚到一點上,這個點叫做焦點,焦點到透鏡中心(即光心)的距離,就稱為焦距。焦距固定的鏡頭,即定焦鏡頭;焦距可以調節變化的鏡頭,就是變焦鏡頭。(當一束與凸透鏡的主軸平行的光穿過凸透鏡時,在凸透鏡的另一側會被凸透鏡匯聚成一點,這一點叫做焦點,焦點到凸透鏡光心的距離就叫這個凸透鏡的焦距。一個凸透鏡的兩側各有一個焦點。)

 

基礎知識

  想實現對焦,先瞭解下Android系統的拍照API為我們提供了什麼。 Camera 類位於 android.hardware 命名空間下,它提供了操作相機的一些方法。

  Camera類提供了自動對焦的方法,它接收一個 AotoFocusCallback的回調。這個方法執行後就相機就會自動對焦,當它對焦完成後(成功或失敗)觸發回調。

  public final void autoFocus(AutoFocusCallback cb);

下面是Callback介面,它的 onAutoFocus方法回調 有個boolean的參數 success,該參數指示了自動對焦的成功或者失敗。

public interface AutoFocusCallback
{
    void onAutoFocus(boolean success, Camera camera); 
}

 

具體實現定義變數

  我們需要一個定時器 Timer,它會每個一段時間執行一個 TimerTask,我們在TimerTask裡執行 對焦方法

private final Timer timer; private TimerTask outstandingTask; private static final long AUTO_FOCUS_INTERVAL_MS = 3500L;  timer = new Timer(true); outstandingTask = new TimerTask() {                @Override                public void run() {                    start();                }            };            timer.schedule(outstandingTask, AUTO_FOCUS_INTERVAL_MS);

 

執行對焦

  注意下面代碼裡我們自己實現的回調,this 是指自己實現了回調,我們需要自己實現回調方法並再次啟動 Timer,以實現連續(間隔)自動對焦

synchronized void start() {    try {        camera.autoFocus(this);    } catch (RuntimeException re) {        // Have heard RuntimeException reported in Android 4.0.x+; continue?        Log.w(TAG, "Unexpected exception while focusing", re);    }}
停止對焦
camera.cancelAutoFocus();
連續對焦

  下面代碼是對焦的回調實現,在對焦完成後(成功或者失敗)我們都再次啟動TimerTask 來檢查和啟動自動對焦

 @Override    public synchronized void onAutoFocus(boolean success, Camera theCamera) {                    outstandingTask = new TimerTask() {                @Override                public void run() {                    checkAndStart();                }            };            timer.schedule(outstandingTask, AUTO_FOCUS_INTERVAL_MS);               if (success) {            Log.i(TAG, "### onAutoFocus success ***************** ");            raiseEvent_OnAutoFocusSuccess();        }        manual = false;    }

 

對焦成功後拍照

  在上面的代碼中, 觸發了 寫了一個raiseEvent_OnAutoFocusSuccess 方法,它判斷對焦成功後執行,我們可以在這個方法裡最自己的實現。比如 在這裡執行拍照。一般情況下,我們會在這裡發出一個訊息或者在聲明一個回調來間接執行拍照。

 

  

 

Android開發(51) 網路攝影機自動對焦。在OpenCVImage Recognition中連續拍照時自動對焦和拍照。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.