当前位置:首页 » 安卓系统 » android相机自动对焦

android相机自动对焦

发布时间: 2022-06-01 11:21:07

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的。

热点内容
手机如何给u盘加密 发布:2025-08-20 12:56:30 浏览:671
自动更新源码 发布:2025-08-20 12:48:36 浏览:743
已关联的qq为什么还要验证密码 发布:2025-08-20 12:46:01 浏览:814
c语言vector用法 发布:2025-08-20 12:46:00 浏览:461
lol脚本代练封号 发布:2025-08-20 12:44:39 浏览:57
时空幻境安卓版哪里有 发布:2025-08-20 12:43:43 浏览:288
解压抠画妆 发布:2025-08-20 12:41:34 浏览:844
华彩人生电脑版无法连接服务器 发布:2025-08-20 12:26:41 浏览:984
xp脚本错误 发布:2025-08-20 12:11:19 浏览:845
租用服务器有什么优势 发布:2025-08-20 12:06:32 浏览:872