android攝像頭對焦
⑴ 手機相機模糊怎麼辦
如果您使用的是華為手機,手機後置攝像頭拍照模糊不清晰可能是因為鏡頭臟污、拍照對焦不正常、拍照抖動等問題導致,建議根據以下操作步驟排查:
1.請查看鏡頭是否有貼膜、臟污、遮擋物
如果使用了非手機盒子裡面原裝的保護殼,或者攝像頭上及周圍有貼膜。會影響攝像頭透光性和對焦功能,容易出現拍照眩光、模糊、對焦不準、不能識別微距等異常。
請先去掉保護殼和貼膜,用干凈的軟布朝一個方向擦拭攝像頭及周圍,重啟手機後再確認拍攝是否清晰。
2.請在對焦完成後再拍照
拍照(錄像)時,可以點擊屏幕進行對焦,如果預覽界面從模糊到清晰,說明手機對焦功能是正常的。如果預覽界面一直模糊,可能是手機對焦功能出現異常,建議提前備份好重要數據(微信/QQ等應用需單獨備份),攜帶購機憑證前往華為客戶服務中心檢測。
3.請在拍照時保持手機穩定
拍攝時需要保持手機穩定。特別是超遠距離拍照(錄像)時,請使用合適的變焦倍數,變焦倍數越大,畫面視角越小,拍攝主體更大,對環境抖動會更加敏感。如果是固定狀態建議使用三腳架,運動狀態可以搭配雲台使用,都可以獲得良好的穩定效果。在拍照設置中開啟「定時拍照」,避免點擊屏幕瞬間造成的抖動。也可以插上耳機,使用音量鍵控制拍攝。
4.請保持一定距離在拍攝近景時
超近距離拍照(錄像)時,建議保持10厘米以上,再手動點擊屏幕進行對焦後完成拍攝。使用超級微距功能,近距離可拍出更細節清晰的照片。
環境光線不充足模糊,拍照或錄像時光線不足也可能導致成像效果模糊。建議拍照或錄像時開啟閃光燈或使用夜景模式。
5.請確認是否為夜景、超級夜景模式拍照模糊
相機中的部分模式需要一定的時間才能完成,如夜景、超級夜景模式,曝光時間較長,如果手機有抖動或被拍攝的對象有移動,會造成照片模糊,拍攝過程中請保證手機穩定(建議使用三腳架固定拍攝),待拍攝完成後再移動手機。
6.請確認是否為大光圈、人像模式拍照模糊
大光圈或人像模式會對畫面背景進行虛化,因此感覺部分畫面模糊,這個正常的虛化效果。如果不需要背景模糊效果,可切換至其他模式拍照。
7.請確認是否為隔著玻璃拍照模糊
隔著玻璃拍照時,激光對焦檢測到玻璃存在,可能會對玻璃的位置進行對焦,由於玻璃比較近,相機自動切換到微距模式進行拍照。此現象為正常現象,可以放心使用。若識別到微距模式,建議關閉微距模式,在正常拍照模式下嘗試手動對焦拍攝。
若嘗試以上方法後仍未解決問題,請備份好重要數據(微信/QQ等應用需單獨備份),攜帶購機憑證前往華為客戶服務中心進行檢測。
⑵ 為啥適配的安卓7.0以上的攝像頭都無法對焦
手機/平板電腦相機無法對焦時,請操作:
1.將拍照模式更改為自動模式嘗試。
2.攝像頭是否離物體太遠或太近(部分型號不支持微距拍攝),重新調整距離嘗試。
3.重置相機參數嘗試:相機-齒輪圖標-恢復默認設置/重置。
4.若無效,更新手機系統版本(升級前請備份設備中數據)嘗試。
5.若依然無法對焦,請備份手機中數據將機器恢復出廠設置嘗試。
若問題依然存在,建議您攜帶上購機發票、包修卡和機器到當地的三星服務中心,由專業的工程師幫您檢測。
⑶ 如何實現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();
⑷ 如何實現android手機攝像頭的的自動對焦
發現好多人都在解決一個問題那就是,如何實現android相機的自動對焦,而且是連續自動對焦的。當然直接調用系統相機就不用說了,那個很簡單的。下面主要來看看如如何自己實現一個相機,並且實現自動連續對焦。
根據網上的資料有如下幾種:
1 極端人物的做法: 使用一個定時器,設定定時時間,然後不間斷的對焦。
2 極客人物的做法: 那就是利用驅動層實現,但是這個一般人還是算了吧
3 就個人而言: 觀察系統的原生相機得知,這東東也沒用定時器啊,貌似也不可能復雜到全用驅動來實現,即使底層用的是C 實現,但是理論上講,google肯定會提供這個封裝好東東。於是果斷的去查閱 DOC 一看,發現果然有這個東東 : 代碼如下
[java] view plainprint?
<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>
⑸ 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()。某些手機里自帶的
拍照軟體可能就是採用這種方式。
⑹ android 自定義Camera觸摸對焦在2.3怎麼實現
不知道這樣有沒有幫到你...
public android.hardware.Camera camera;
private
SurfaceView sView;
protected void onCreate(Bundle savedInstanceState)
{
sView = (SurfaceView) findViewById(R.id.sView);
sView.setOnClickListener(new SurfaceView.OnClickListener() {
public void onClick(View v) {
camera.autoFocus(null);
}
});
}你可以試試
⑺ 在Android代碼中如何知道攝像頭是否支持自動對焦
看一下camera源碼就知道了,你可以new cameradevice 然後調用getSupported****。
⑻ 如何實現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();