android相機自動對焦
1. android 前置攝像頭可以autofocus嗎
android 前置攝像頭可以autofocus方法:
第一:最常見的實現---利用按鍵或拍照前一次性自動聚焦在Activity里申明變數private
AutoFocusCallback myAutoFocusCallback = null;然後
自動聚焦變數回調
myAutoFocusCallback = new AutoFocusCallback()
{
public void onAutoFocus(boolean success, Camera
camera) {
// TODO Auto-generated method stub
if(success)//success表示對焦成功
{
Log.i(tag, "myAutoFocusCallback:
success...");
//myCamera.setOneShotPreviewCallback(null);
}
else
{
//未對焦成功
Log.i(tag, "myAutoFocusCallback: 失敗了...");
}
}
};
在Camera.startPreview()之後,拍照Camera.takePicture()
之前調用myCamera.autoFocus(myAutoFocusCallback)。
第二:
通過TimerTask設置一個定時器來循環,每隔一定時間調用myCamera.autoFocus(myAutoFocusCallback)一次。結果是攝像頭一直在自我聚焦,重復清晰--模糊----清晰---模糊的過程。
第三:通過Handler和Thread,開啟一個線程進行自動聚焦。本質和第二種是一樣的。後續我會寫一個demo發上來。
第四:
通過監聽感測器來觸發autoFocus。常用的是角度感測器或加速度感測器,當監聽的值超過一定閾值時觸發。這也是國外程序員們常用的思路。
第五:設置聚焦方式為myParam.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
Continuous auto focus mode intended for video
recording. The camera continuously tries to focus. This is the best
choice for video recording because the focus changes smoothly .
Applications still can call takePicture(Camera.ShutterCallback,
Camera.PictureCallback,
Camera.PictureCallback) in this mode
but the subject may not be in focus. Auto focus starts when the
parameter is set.
Since API level 14, applications can
call autoFocus(AutoFocusCallback) in
this mode. The focus callback will immediately return with a
boolean that indicates whether the focus is sharp or not. The focus
position is locked after autoFocus call. If applications want to
resume the continuous focus, cancelAutoFocus must be called.
Restarting the preview will not resume the continuous autofocus. To
stop continuous focus, applications should change the focus mode to
other modes.
意思是在錄像的時候調用這種聚焦方式好,在拍照情況下這種聚焦方式可能不成功。
設置之後myParam.set("rotation",
90);
這句話的設置不起作用。拍攝得到的照片和預覽的方向是錯90度的。需要得到Bitmap之後,利用Matrix自己旋轉下。
旋轉示例:mBitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);//data是位元組數據,將其解析成點陣圖myCamera.stopPreview();isPreview = false;
設置FOCUS_MODE_CONTINUOUS_VIDEO)之後,myParam.set("rotation",
90)失效。圖片竟然不能旋轉了,故這里要旋轉下
Matrix matrix = new Matrix();
matrix.postRotate((float)90.0);
Bitmap rotaBitmap = Bitmap.createBitmap(mBitmap,
0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix,
false);
設置成FOCUS_MODE_CONTINUOUS_VIDEO之後,再調用Camera.autoFocus()會聚焦失敗。
第六: 就是通過分析onPreviewFrame得到預覽幀視頻,分析亮度變化,來觸Camera.autoFocus()。如果亮度變化,肯定是攝像頭和被拍攝物體之間發生了相對運動,需要觸發autoFocus()。某些手機里自帶的
拍照軟體可能就是採用這種方式。
2. Android,如何讓安卓手機以最近距離對焦
如果手機攝像頭有自帶自動對焦功能的默認情況下就能自動對焦,打開相機後點擊屏幕它就會根據你點的點的距離自動調焦
3. 如何實現Android手機攝像頭的的自動對焦
m_objCamera = Camera.open();
Camera.Parameters objParam = m_objCamera.getParameters();
//設置對焦模式為持續對焦,(最好先判斷一下手機是否有這個對焦模式,有些手機沒有會報錯的)
objParam.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
m_objCamera.setDisplayOrientation(90);
m_objCamera.setParameters(objParam);
m_objCamera.startPreview();
4. 有沒有支持手動變焦、對焦的相機軟體用的是安卓系統的手機
諾基亞N9。它沒有實體拍照按鍵,拍照只能在屏幕上進行。支持觸控對焦,但是在點一下屏幕上需要對焦的地方之後,它並不會自動拍照,而是需要點一下虛擬快門鍵。由於沒有實體拍照鍵,所以自動對焦就要通過長按虛擬快門的這樣一個方式來完成。在長按虛擬快門鍵的時候,如果屏幕上的自動對焦框變成藍色了,就表示對焦成功,此時便可以把手鬆開,拍照完成。如果在對焦成功後又不想拍了,只需要把手指滑出快門就可以了,非常方便。 謝謝
5. 怎樣取消自動對焦 安卓開發編程
自動對焦一般是軟體控制的,對焦過程是軟體+硬體控制的。若不想自動對焦可以在相機設置內取消自動對焦(或改成手動對焦)
6. 華為手機後置攝像頭拍照模糊不對焦怎麼辦
如果您的手機出現後置攝像頭拍照模糊不清晰,建議根據以下操作步驟排查:
一,請您保持攝像頭和激光感測器不被遮擋
如果手機後置攝像頭拍攝的照片或視頻模糊,可能是攝像頭鏡頭或激光感測器被異物遮擋。
覆蓋後置攝像頭的保護膜(含透明保護膜)可能會影響其性能,在弱光條件下拍攝時導致鏡頭耀斑、重影或模糊。
如果設備使用激光對焦、TOF感測器對焦、3D深度感測器測量拍攝距離,那麼保護膜、三方保護套或其他遮擋物可能會干擾感測器。導致相機將無法正確對焦,圖像模糊和不清晰。使用相機前,請撕下攝像頭保護膜(含透明保護膜),並用軟布清潔鏡頭和感測器,使用華為官方保護套。
註:您可以在官網或我的華為APP搜索對應產品型號,查看對應規格參數>後置攝像頭參數。
二,請檢查相機是否可以正確對焦
如果相機距離您拍攝對象太遠或太近,圖片和視頻可能會模糊。
請檢查相機是否可以正確對焦。例如:拍攝遠處照片時,輕觸取景框,聚焦在遠處的物體上。拍攝特寫鏡頭時,請將手機距離被拍攝物體至少10厘米,輕觸取景框對焦,不要使用變焦。如果取景框中的圖像在此過程中變得更清晰,則意味著設備的相機可以正確對焦。
如果相機可以正常對焦,但圖片和視頻仍然模糊不清楚,請在下面找到不同的場景和解決方案。
如果相機無法正常對焦,請您備份好您的重要數據(QQ,微信等第三方應用需單獨備份),攜帶購機憑證前往華為客戶服務中心尋求進一步幫助。
三,請確認對焦完成後再拍攝
如果您在拍照時觸摸取景框手動對焦,請在對焦框消失之前不要點擊快門按鈕,因為這表明相機仍未完成對焦。
如果您在拍攝視頻時點擊取景框,相機將鎖定焦距,以避免移動設備以更改場景或位置時圖像不清晰或不穩定。您可能需要再次觸摸取景框才能手動重新對焦相機。要讓相機自動對焦,請在拍攝視頻時避免觸摸取景框。
四,建議使用默認變焦倍數
使用高倍變焦拍照時,手機將切換到數字變焦,相機對輕微的移動都會更敏感。因此,圖像可能會顯得模糊。建議降低變焦倍數或使用默認變焦倍數(取景框右側變焦條上實心白點為默認變焦倍數)。
五,請您保持穩定拍攝
如果您拍攝對象移動得很快,或者拍攝過程中手機不斷移動,相機將無法正常對焦,照片或視頻可能會模糊。建議您拍攝過程中請穩住手機,必要時使用三腳架。
如果您試圖捕捉移動物體,請按住快門按鈕拍攝連拍照片,然後選擇最佳照片。連拍僅在解析度設置為20 MP或更低時可用。
六,您可以適當移動拍攝距離
由於景深較淺,某些手機相機在拍攝特寫照片時可能無法正確對焦。
使用大光圈鏡頭可以讓更多光線進入,但它們景深較淺。使用此類相機時,請確保拍攝的物體距離手機至少20厘米(8英寸),並且位於取景框的中心。
如果您的設備支持超級微距模式,在使用時請保持手機與拍攝對象距離在2.5-10厘米。
七,特殊相機模式拍攝技巧
在夜間模式、流光快門模式下,相機拍攝曝光時間較長,因此相機或拍攝對象的任何移動都可能導致照片或視頻不清晰。拍攝過程中請保持手機穩定,必要時使用三腳架。
大光圈或人像模式會自動模糊背景,使被攝體脫穎而出。這種拍攝模式下的背景模糊屬於正常現象,請您放心使用即可。
如嘗試以上方法後仍未解決問題,請您備份好您的重要數據(QQ,微信等第三方應用需單獨備份),攜帶購機憑證前往華為客戶服務中心尋求進一步幫助。
7. 如何實現android手機攝像頭的的自動對焦
1 使用一個定時器,設定定時時間,然後不間斷的對焦。
2 利用驅動層實現
3 觀察系統的原生相機得知,這東東也沒用定時器啊,貌似也不可能復雜到全用驅動來實現,即使底層用的是C 實現,但是理論上講,google肯定會提供這個封裝好東東。於是果斷的去查閱 DOC 一看,發現果然有這個東東 : 代碼如下[java] view plain print?
<strong><span style="font-size:18px">public class MainActivity extends Activity {
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private boolean flag = false;
private String fileUrl="";
Camera camera;
Camera.Parameters parameters;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
Button button=(Button) findViewById(R.id.takepicture);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.setKeepScreenOn(true);
surfaceView.setFocusable(true);
surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
surfaceHolder.addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera=null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
if(null==camera){
camera=Camera.open();
try {
camera.setPreviewDisplay(surfaceHolder);
initCamera();
camera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
//實現自動對焦
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){
initCamera();//實現相機的參數初始化
camera.cancelAutoFocus();//只有加上了這一句,才會自動對焦。
}
}
});
}
});
}
//相機參數的初始化設置
private void initCamera()
{
parameters=camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight()); // 部分定製手機,無法正常識別該方法。
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1連續對焦
setDispaly(parameters,camera);
camera.setParameters(parameters);
camera.startPreview();
camera.cancelAutoFocus();// 2如果要實現連續的自動對焦,這一句必須加上
}
//控制圖像的正確顯示方向
private void setDispaly(Camera.Parameters parameters,Camera camera)
{
if (Integer.parseInt(Build.VERSION.SDK) >= 8){
setDisplayOrientation(camera,90);
}
else{
parameters.setRotation(90);
}
}
//實現的圖像的正確顯示
private void setDisplayOrientation(Camera camera, int i) {
Method downPolymorphic;
try{
downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});
if(downPolymorphic!=null) {
downPolymorphic.invoke(camera, new Object[]{i});
}
}
catch(Exception e){
Log.e("Came_e", "圖像出錯");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}</span></strong>
8. 如何實現Android手機攝像頭的自動對焦
activity_main);
surfaceView = (SurfaceView) findViewById(R.id.setType(SurfaceHolder;
initCamera();
camera.getHolder();
setContentView(R.layout.surfaceView1),貌似也不可能復雜到全用驅動來實現,即使底層用的是C 實現,但是理論上講.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
surfaceHolder.addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//.printStackTrace();實現自動對焦
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){
initCamera();/
surfaceHolder;;
Camera camera;
Camera,google肯定會提供這個封裝好東東。於是果斷的去查閱 DOC 一看,發現果然有這個東東 .open();
try {
camera.setPreviewDisplay(surfaceHolder);
camera=null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
/:
1 極端人物的做法,但是這個一般人還是算了吧
3 就本人這樣的觀察系統的原生相機得知,這東東也沒用定時器啊; TODO Auto-generated catch block
e;public class MainActivity extends Activity {
private SurfaceView surfaceView, int format:18px"//
private boolean flag = false;
private String fileUrl=">
private SurfaceHolder surfaceHolder: 使用一個定時器參考下面方法
根據現有的資料有如下幾種;": 代碼如下
[java] view plain print?
<strong><span style=", int width, int height){
///實現相機的參數初始化
camera;只有加上了這一句,才會自動對焦.stopPreview(),設定定時時間,然後不間斷的對焦。
2 極客人物的做法: 那就是利用驅動層實現.startPreview();
} catch (IOException e) {
//.takepicture);
surfaceHolder = surfaceView;font-size;/ TODO Auto-generated method stub
if(null==camera){
camera=Camera; TODO Auto-generated method stub
camera;
Button button=(Button) findViewById(R.id.release().Parameters parameters;
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder;
surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState).SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.setKeepScreenOn(true);
surfaceView.setFocusable(true)。
}
}
});
}
});
}
//相機參數的初始化設置
private void initCamera()
{
parameters=camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight()); // 部分定製手機,無法正常識別該方法。
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1連續對焦
setDispaly(parameters,camera);
camera.setParameters(parameters);
camera.startPreview();
camera.cancelAutoFocus();// 2如果要實現連續的自動對焦,這一句必須加上
}
//控制圖像的正確顯示方向
private void setDispaly(Camera.Parameters parameters,Camera camera)
{
if (Integer.parseInt(Build.VERSION.SDK) >= 8){
setDisplayOrientation(camera,90);
}
else{
parameters.setRotation(90);
}
}
//實現的圖像的正確顯示
private void setDisplayOrientation(Camera camera, int i) {
Method downPolymorphic;
try{
downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});
if(downPolymorphic!=null) {
downPolymorphic.invoke(camera, new Object[]{i});
}
}
catch(Exception e){
Log.e("Came_e", "圖像出錯");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}</span></strong>;
camera.cancelAutoFocus()
9. Android 自定義相機對焦問題
1、首先創建回調方法,代碼如下:
觸屏調用:設置surfaceView的觸屏事件,在該事件中實現camera回調。
10. 目前有木有安卓拍照軟體實現先拍照後對焦的
目前網上能找到的所謂後對焦是 A f t e r F o c u s ,最新版本2.1,不過效果不怎樣,貌似P圖操作,不算後對焦。
一般手機照相APP,一拍花草(或類似的結構)就掉鏈子,往往都是周邊背景賊清楚,關鍵的主體卻是模糊的,這時候就很需要後對焦功能了,但是 A f t e r F o c u s 真不行。
真正的後對焦(所謂的光場)是,拍攝一段對焦(焦平面)變化的高清視頻(幀序列緩存),通過交互操作,從視頻(緩存)中挑出對焦效果滿意的一幀畫面,並保存為照片。可以結合拍攝高清視頻,藉助視頻截圖工具實現所謂的後對焦。
如果你會編程,實現焦距自動變化過程中,全像素高清視頻記錄到緩存,設計緩存視頻瀏覽交互界面,加上單幀保存功能,交互刪除緩存(臨時項目),是完全可以做出這種APP的。