华为荣耀x2怎么实现手动对焦和自动对焦与手动对焦

Android自定义相机实现自动对焦和手动对焦
作者:JulyAnRef
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了android手动实现相机自动和手动对焦功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android自定义相机实现自动对焦和手动对焦:
不调用系统相机,因为不同的机器打开相机呈现的界面不统一也不能满足需求。
所以为了让程序在不同的机器上呈现出统一的界面,并且可以根据需求进行布局,做了此demo。
程序实现代码如下:
import java.io.F
import java.io.FileNotFoundE
import java.io.FileOutputS
import java.io.IOE
import java.lang.reflect.M
import android.graphics.PixelF
import android.hardware.C
import android.hardware.Camera.AutoFocusC
import android.hardware.Camera.P
import android.hardware.Camera.PictureC
import android.hardware.Camera.ShutterC
import android.os.B
import android.os.B
import android.util.L
import android.view.SurfaceH
import android.view.SurfaceV
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import com.hp.classes.config.C
import com.hp.monU
import com.hp.classes.ui.BaseA
@SuppressWarnings("deprecation")
public class PhotographActivity extends BaseActivity implements OnClickListener, SurfaceHolder.Callback {
private SurfaceView surfaceV
private Camera.P
private Button btn_goback, btn_
private SurfaceHolder surfaceH
protected void onDestroy() {
super.onDestroy();
if(camera != null){
camera.stopPreview();
camera.release();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.classes_activity_takephoto);
initView();
protected void onResume() {
super.onResume();
initCamera();
private void initView(){
btn_goback = (Button) findViewById(R.id.btn_goback);
btn_goback.setOnClickListener(this);
btn_takephoto = (Button) findViewById(R.id.btn_takephoto);
btn_takephoto.setOnClickListener(this);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceView.setFocusable(true);
surfaceView.setOnClickListener(this);
surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.setKeepScreenOn(true);
surfaceHolder.setFixedSize(400, 300);
surfaceHolder.addCallback(this);
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
e.printStackTrace();
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 实现自动对焦
camera.autoFocus(new AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
camera.cancelAutoFocus();// 只有加上了这一句,才会自动对焦
doAutoFocus();
// 相机参数的初始化设置
private void initCamera() {
if (null == camera) {
camera = Camera.open();
parameters = camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
if (!Build.MODEL.equals("KORIDY H30")) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);// 1连续对焦
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
setDispaly(camera);
camera.startPreview();
camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上
// 控制图像的正确显示方向
private void setDispaly(Camera camera) {
if (Integer.parseInt(Build.VERSION.SDK) &= 8) {
setDisplayOrientation(camera, -90);
parameters.setRotation(-90);
// 实现的图像的正确显示
private void setDisplayOrientation(Camera camera, int i) {
Method downP
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", "图像出错");
public void onClick(View v) {
switch (v.getId()) {
case R.id.surfaceView:
doAutoFocus();
case R.id.btn_takephoto:
takePicture();
case R.id.btn_goback:
// handle button auto focus
private void doAutoFocus() {
parameters = camera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
camera.autoFocus(new AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
camera.cancelAutoFocus();// 只有加上了这一句,才会自动对焦。
if (!Build.MODEL.equals("KORIDY H30")) {
parameters = camera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);// 1连续对焦
camera.setParameters(parameters);
parameters = camera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
private void takePicture() {
camera.takePicture(shutterCallback, rawCallback, jpegCallback);
// define shutterCallback
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
// TODO Do something when the shutter closes.
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Do something with the image RAW data.
// stroe the picture in format jpeg
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// Save the image JPEG data to the SD card
FileOutputStream outStream =
//修改图片路径和名称
String tempFilename = String.valueOf(System.currentTimeMillis()) + ".jpg";
File folder = Constants.CACHE_FOLDER;
if (!folder.isDirectory()) {
folder.mkdirs();
String path = Constants.CACHE_FOLDER + File.separator + tempF
outStream = new FileOutputStream(path);
outStream.write(data);
outStream.flush();
outStream.close();
surfaceView.setBackgroundDrawable(new BitmapDrawable(BitmapFactory.decodeByteArray(data, 0, data.length)));
} catch (FileNotFoundException e) {
Log.e("TAG", "File Note Found", e);
} catch (IOException e) {
Log.e("TAG", "IO Exception", e);
classes_activity_takephoto.xml代码如下:
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" &
&SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/rlright" /&
&LinearLayout
android:id="@+id/rlright"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="#2b2b2b"
android:gravity="center_horizontal"
android:orientation="vertical" &
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center" &
android:id="@+id/btn_goback"
style="@style/PETextButton"
android:text="返回"/&
&/LinearLayout&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center" &
android:id="@+id/btn_takephoto"
style="@style/PETextButton"
android:text="拍照" /&
&/LinearLayout&
&/LinearLayout&
&/RelativeLayout&
在清单文件需要添加相应权限:
&uses-permission android:name="android.permission.CAMERA"/&
&uses-feature android:name="android.hardware.camera"/&
&uses-feature android:name="android.hardware.camera.autofocus"/&
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具1643人阅读
android(10)
camera(2)
android自定义相机实现自动对焦和手动对焦:
不调用系统相机,因为不同的机器打开相机呈现的界面不统一也不能满足需求。
所以为了让程序在不同的机器上呈现出统一的界面,并且可以根据需求进行布局,做了此demo。
程序实现代码如下:
import java.io.F
import java.io.FileNotFoundE
import java.io.FileOutputS
import java.io.IOE
import java.lang.reflect.M
import android.graphics.PixelF
import android.hardware.C
import android.hardware.Camera.AutoFocusC
import android.hardware.Camera.P
import android.hardware.Camera.PictureC
import android.hardware.Camera.ShutterC
import android.os.B
import android.os.B
import android.util.L
import android.view.SurfaceH
import android.view.SurfaceV
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import com.hp.classes.config.C
import com.hp.monU
import com.hp.classes.ui.BaseA
@SuppressWarnings(&deprecation&)
public class PhotographActivity extends BaseActivity implements OnClickListener, SurfaceHolder.Callback {
&& &private SurfaceView surfaceV
&& &private C
&& &private Camera.P
&& &private Button btn_goback, btn_
&& &private SurfaceHolder surfaceH
&& &@Override
&& &protected void onDestroy() {
&& &&& &super.onDestroy();
&& &&& &if(camera != null){
&& &&& &&& &camera.stopPreview();
&& &&& &&& &camera.release();
&& &&& &&& &camera =
&& &@Override
&& &protected void onCreate(Bundle savedInstanceState) {
&& &&& &super.onCreate(savedInstanceState);
&& &&& &setContentView(R.layout.classes_activity_takephoto);
&& &&& &initView();
&& &@Override
&& &protected void onResume() {
&& &&& &super.onResume();
&& &&& &initCamera();
&& &private void initView(){
&& &&& &btn_goback = (Button) findViewById(R.id.btn_goback);
&& &&& &btn_goback.setOnClickListener(this);
&& &&& &btn_takephoto = (Button) findViewById(R.id.btn_takephoto);
&& &&& &btn_takephoto.setOnClickListener(this);
&& &&& &surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
&& &&& &surfaceView.setFocusable(true);
&& &&& &surfaceView.setOnClickListener(this);
&& &&& &surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
&& &&& &surfaceHolder = surfaceView.getHolder();
&& &&& &surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
&& &&& &surfaceHolder.setKeepScreenOn(true);
&& &&& &surfaceHolder.setFixedSize(400, 300);
&& &&& &surfaceHolder.addCallback(this);
&& &@Override
&& &public void surfaceDestroyed(SurfaceHolder holder) {
&& &&& &// TODO Auto-generated method stub
&& &&& &camera.stopPreview();
&& &&& &camera.release();
&& &&& &camera =
&& &@Override
&& &public void surfaceCreated(SurfaceHolder holder) {
&& &&& &// TODO Auto-generated method stub
&& &&& &try {
&& &&& &&& &camera.setPreviewDisplay(surfaceHolder);
&& &&& &} catch (IOException e) {
&& &&& &&& &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) {
&& &&& &&& &&& &&& &camera.cancelAutoFocus();// 只有加上了这一句,才会自动对焦
&& &&& &&& &&& &&& &doAutoFocus();
&& &&& &&& &&& &}
&& &&& &&& &}
&& &&& &});
&& &// 相机参数的初始化设置
&& &private void initCamera() {
&& &&& &if (null == camera) {
&& &&& &&& &camera = Camera.open();
&& &&& &parameters = camera.getParameters();
&& &&& &parameters.setPictureFormat(PixelFormat.JPEG);
&& &&& &parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
&& &&& &if (!Build.MODEL.equals(&KORIDY H30&)) {
&& &&& &&& &parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);// 1连续对焦
&& &&& &}else{
&& &&& &&& &parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
&& &&& &camera.setParameters(parameters);
&& &&& &setDispaly(camera);
&& &&& &camera.startPreview();
&& &&& &camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上
&& &// 控制图像的正确显示方向
&& &private void setDispaly(Camera camera) {
&& &&& &if (Integer.parseInt(Build.VERSION.SDK) &= 8) {
&& &&& &&& &setDisplayOrientation(camera, -90);
&& &&& &} else {
&& &&& &&& &parameters.setRotation(-90);
&& &// 实现的图像的正确显示
&& &private void setDisplayOrientation(Camera camera, int i) {
&& &&& &Method downP
&& &&& &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 void onClick(View v) {
&& &&& &switch (v.getId()) {
&& &&& &case R.id.surfaceView:
&& &&& &&& &doAutoFocus();
&& &&& &&& &
&& &&& &case R.id.btn_takephoto:
&& &&& &&& &takePicture();
&& &&& &&& &
&& &&& &case R.id.btn_goback:
&& &&& &&& &finish();
&& &&& &&& &
&& &&& &default:
&& &&& &&& &
&& &// handle button auto focus
&& &private void doAutoFocus() {
&& &&& &parameters = camera.getParameters();
&& &&& &parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
&& &&& &camera.setParameters(parameters);
&& &&& &camera.autoFocus(new AutoFocusCallback() {
&& &&& &&& &@Override
&& &&& &&& &public void onAutoFocus(boolean success, Camera camera) {
&& &&& &&& &&& &if (success) {
&& &&& &&& &&& &&& &camera.cancelAutoFocus();// 只有加上了这一句,才会自动对焦。
&& &&& &&& &&& &&& &if (!Build.MODEL.equals(&KORIDY H30&)) {
&& &&& &&& &&& &&& &&& &parameters = camera.getParameters();
&& &&& &&& &&& &&& &&& &parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);// 1连续对焦
&& &&& &&& &&& &&& &&& &camera.setParameters(parameters);
&& &&& &&& &&& &&& &}else{
&& &&& &&& &&& &&& &&& &parameters = camera.getParameters();
&& &&& &&& &&& &&& &&& &parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
&& &&& &&& &&& &&& &&& &camera.setParameters(parameters);
&& &&& &&& &&& &&& &}
&& &&& &&& &&& &}
&& &&& &&& &}
&& &&& &});
&& &private void takePicture() {
&& &&& &camera.takePicture(shutterCallback, rawCallback, jpegCallback);
&& &// define shutterCallback
&& &ShutterCallback shutterCallback = new ShutterCallback() {
&& &&& &public void onShutter() {
&& &&& &&& &// TODO Do something when the shutter closes.
&& &PictureCallback rawCallback = new PictureCallback() {
&& &&& &public void onPictureTaken(byte[] data, Camera camera) {
&& &&& &&& &// TODO Do something with the image RAW data.
&& &// stroe the picture in format jpeg
&& &PictureCallback jpegCallback = new PictureCallback() {
&& &&& &public void onPictureTaken(byte[] data, Camera camera) {
&& &&& &&& &// Save the image JPEG data to the SD card
&& &&& &&& &FileOutputStream outStream =
&& &&& &&& &try {
&& &&& &&& &&& &//修改图片路径和名称
&& &&& &&& &&& &String tempFilename = String.valueOf(System.currentTimeMillis()) + &.jpg&;
&& &&& &&& &&& &File folder = Constants.CACHE_FOLDER;
&& &&& &&& &&& &if (!folder.isDirectory()) {
&& &&& &&& &&& &&& &folder.mkdirs();
&& &&& &&& &&& &}
&& &&& &&& &&& &String path = Constants.CACHE_FOLDER + File.separator + tempF
&& &&& &&& &&& &outStream = new FileOutputStream(path);
&& &&& &&& &&& &outStream.write(data);
&& &&& &&& &&& &outStream.flush();
&& &&& &&& &&& &outStream.close();
&&&&&&&&&&&&&&& surfaceView.setBackgroundDrawable(new BitmapDrawable(BitmapFactory.decodeByteArray(data, 0, data.length)));
&& &&& &&& &} catch (FileNotFoundException e) {
&& &&& &&& &&& &Log.e(&TAG&, &File Note Found&, e);
&& &&& &&& &} catch (IOException e) {
&& &&& &&& &&& &Log.e(&TAG&, &IO Exception&, e);
&& &&& &&& &}
classes_activity_takephoto.xml代码如下:
&?xml version=&1.0& encoding=&utf-8&?&
&RelativeLayout xmlns:android=&/apk/res/android&
&&& android:layout_width=&match_parent&
&&& android:layout_height=&match_parent& &
&&& &SurfaceView
&&&&&&& android:id=&@+id/surfaceView&
&&&&&&& android:layout_width=&match_parent&
&&&&&&& android:layout_height=&match_parent&
&&&&&&& android:layout_alignParentLeft=&true&
&&&&&&& android:layout_toLeftOf=&@+id/rlright& /&
&&& &LinearLayout
&&&&&&& android:id=&@+id/rlright&
&&&&&&& android:layout_width=&40dp&
&&&&&&& android:layout_height=&match_parent&
&&&&&&& android:layout_alignParentRight=&true&
&&&&&&& android:background=&#2b2b2b&
&&&&&&& android:gravity=&center_horizontal&
&&&&&&& android:orientation=&vertical& &
&&&&&&& &LinearLayout
&&&&&&&&&&& android:layout_width=&wrap_content&
&&&&&&&&&&& android:layout_height=&0dip&
&&&&&&&&&&& android:layout_weight=&1&
&&&&&&&&&&& android:gravity=&center& &
&&&&&&&&&&& &Button
&&&&&&&&&&&&&&& android:id=&@+id/btn_goback&
&&&&&&&&&&&&&&& style=&@style/PETextButton&
&&&&&&&&&&&&&&& android:text=&返回&/&
&&&&&&& &/LinearLayout&
&&&&&&& &LinearLayout
&&&&&&&&&&& android:layout_width=&wrap_content&
&&&&&&&&&&& android:layout_height=&0dip&
&&&&&&&&&&& android:layout_weight=&1&
&&&&&&&&&&& android:gravity=&center& &
&&&&&&&&&&& &Button
&&&&&&&&&&&&&&& android:id=&@+id/btn_takephoto&
&&&&&&&&&&&&&&& style=&@style/PETextButton&
&&&&&&&&&&&&&&& android:text=&拍照& /&
&&&&&&& &/LinearLayout&
&&& &/LinearLayout&
&/RelativeLayout&
在清单文件需要添加相应权限:
&&& &uses-permission android:name=&android.permission.CAMERA&/&
&&& &uses-feature android:name=&android.hardware.camera&/&
&&& &uses-feature android:name=&android.hardware.camera.autofocus&/&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24554次
排名:千里之外
原创:29篇
转载:26篇
(1)(2)(3)(8)(7)(3)(5)(1)(2)(23)手机对比度对焦,也称为反差对焦,这种对焦方法有非常严谨的数学推导的,在下因为是工科生,数学功底不好,只能做非常粗略的介绍,详细的内容还要依靠更有能力的知友来实现。一般来说基于图像处理的自动对焦的方法有两种,第一种是通过计算对焦深度得到的,第二种是通过计算离焦深度得到的。这两种方法的原理说明起来比较麻烦,简单来说,离焦深度方法是从离焦图像中获得模糊程度和深度信息,根据二者加上对应的拍摄参数来计算清晰度评价值,并结合这些所有值,得到需要调整的具体量,因为需要的图像较少,所以速度较快。对焦深度方法要麻烦一些,首先需要一系列模糊程度不同的图像,计算这一系列图像的清晰度评价值,之后对这一系列值以拟合的方式得到评价曲线,根据评价曲线的峰值确定最佳对焦位置,这种方法精度高,但速度慢。需要说一点题外话就是,虽然这个些过程一样,但不同的厂商的计算方法其实有些不同,所以一样的对比度对焦,有的厂家就收敛就快,有的厂家就则慢。这两种方法都不离开一个东西,就是清晰度评价值,清晰度评价值类似一个统计量,是根据一些参数经过某种处理之后得到的,当然清晰度评价值还有其他的要求,比如有效性/鲁棒性等。平常计算清晰度评价值的方法一般有这么几种(不全面,还有其他的很多):第一种是频谱函数的方法,清晰的图像对比相应的不清晰图像在相应频谱分量上含有更多的信息,一种反映出来就是频谱函数的幅值,可以利用这种方法评价。第二种是信息熵,清晰的图像的信息熵大于相应的不清晰图像,这个原始证明很繁琐,所以这里用数据处理定理反证:1.清晰的图像处理后可以得到不清晰的图像。 2.但不清晰的图像无论如何处理都不能单独得到清晰的图像。 3.所以清晰图像的信息熵大于相应的不清晰图像,如果有方法计算出信息熵,则可以用熵来评价。第三种是梯度函数,在图像中梯度函数是一个可以衡量某变量变换率快慢的函数,正确对焦的图像有较为清晰的边缘,而在边缘的地方更为锐利,往往有变化率的最大值,或者说变化最不连续,如此一来也可以评价清晰度。现在常用的是第三种,也就是梯度,梯度在数学上是变换率的表征,在实际计算的时候我们可以用方差、能量梯度或者拉普拉斯算子(等价于二阶微分)或者其他一些方法来实现,这些计算方法本身各自的复杂度不同,但最影响计算量的是选取图像中像素点的多寡,比如一个对比度对焦选款,是取中央一点,还是边缘四点,还是对角线五点?这都是各个相机厂家考虑的问题。现在来看看,下图是那种评价方法?
下面是专业回复:
最近正好在学习AF的驱动芯片,就来随便说说吧。其实还不是太懂。
&img src="///bf4c64f235e19e238f82d_b.jpg" data-rawwidth="200" data-rawheight="224" class="content_image" width="200"&这是目前市面上最常见的VCM Open Loop的摄像头模组的示意图。通过驱动线圈调整Lens的位置来实现调焦。
这是目前市面上最常见的VCM Open Loop的摄像头模组的示意图。通过驱动线圈调整Lens的位置来实现调焦。要实现自动对焦,都会有一张行程表,在行程表中从Inf端到Macro端的整个行程中设定若干(10~15)个采样点,基本上是Inf端比较密集,Macro端比较稀疏。原因如下图所示:
&img src="///00790cd46cfdd07a3eee6ac5c6d410e1_b.jpg" data-rawwidth="287" data-rawheight="306" class="content_image" width="287"&
在自动对焦的时候,BB读取算法中的行程表,下达指令到AF驱动芯片,改变输出的电流大小来调整Lens的位置,然后获得一张图片。然后利用ISP计算这张图片的清晰度数据,上交到BB。在整个行程表跑完之后,如果所有采样点中有至少一张图片的清晰度数据达到预设的阈值,那么就把清晰度最高的图片对应的采样点作为对焦目标点,驱动Lens跑到相应位置,对焦成功;如果所有采样点的清晰度数据都不能达到阈值,则对焦失败,Lens跑到Inf或者No Power点。清晰度的计算,我没有研究,但是从和Image Sensor的厂家的技术人员交流来看,估计是用频谱分析的方法。在相机应用中,通常按拍摄按钮的时候会对焦,手指触屏的时候会对焦,有些在预览的时候也会对焦。但是这三种场景,对焦的时候画面各位置(中心,四边,四角等)的图像在计算清晰度时的权重是不一样的。这些还没有研究。以上是我现在想到的。估计会有错,很可能有遗漏。另外,马达除了VCM形式,还有piezo形式的,MEMS形式的。这些没有研究到,市场上也不常见。电流驱动方法包括PWM和Linear,一个有噪声(会在图像上反映出来),一个比较耗电。同样是VCM马达,最常见的是单向Open-loop的,现在还有Close-loop的和双向的,结构会有些许差别。不过这些都不常见,对焦算法也没有本质的差别,所以就略过了。
反差对焦,来回移动焦点,寻找反差最大边缘最锐利的一刻,完成对焦。
下面是大神回复:
首先,在拍摄景物时,镜头汇聚光线,把所拍摄的物体通过机身内部的感光材料(胶片、或者ccd、cmos等)感知其光线,然后通过相应的光电反应,让影像清晰的留在感光材料上,并通过光电技术存储。那就有一个疑问了,小孔成像不是倒着的吗,那为什么从取景器里看的画面是正的。那是因为光线通过镜头在机身内的五棱镜的反复折射后,将影像还原。
首先,并不是所有camera都需要对焦,有些摄像头是广角的,景深很深,就是说从很近到无穷远的整个可视范围成像都是清楚的,称为hyper focal超焦距,通常手机的前置摄像头就是这种。其次,需要对焦的摄像头又分为定焦和可变焦。变焦指改变镜头组中各镜片的相对位置来改变镜头的焦距(整个镜头组的屈光度都改变了),使镜头能看到的景象范围和距离都发生改变。对焦是指在焦距确定的情况下,调整镜头组和感光元件的距离,使其等于像距,就是让成像平面和感光元件重合,这时图像才最清晰。定焦镜头和变焦镜头都需要对焦。对焦又分自动对焦和手动对焦。手动对焦好理解,通过机械(转动对焦环)或电子方式(通过按扭或屏幕触摸操作让马达驱动镜片)手动调整镜头位置实现对焦。自动对焦只需发出对焦指令(半按快门或者点击屏幕),摄像头就会自主不断移动镜头,并在觉得画面清晰的时候停住,完成对焦。下面再说自动对焦。自动对焦基本原理是:对焦过程中图像仍在一直不断产生,把镜头在某个位置时的那帧图像送到图像处理器(ISP)处理,得出该图像的统计信息,再把这信息送到对焦算法库(也许是在isp硬件上执行,也许是在驱动程序软件执行),对焦算法库根据硬件规范和上述统计信息算出下一步镜头该往哪个方向移动多少距离,并驱动镜头到达那个位置;接着在此位置得到新图像,又计算统计信息,计算再下一步的镜头位置&图像清晰度渐渐变化,如此经过几个循环收敛,图像到一定程度,就认为对焦成功。上述图像统计信息必然是和对焦算法一一对应的,用什么样的算法就需要ISP计算相应的统计信息。围绕不同的对焦算法,就形成了各种自动对焦方式,不同的对焦方式有不同的对焦速度和硬件需求及设计(主要针对摄像头传感器)。对焦算法设计的目标就是快狠准地完成对焦。各种常见算法各路大神已经说得非常全面,在此只做简单小结,(也不作精确分类,因为认识不全面,也分不太清):第一类,测距法。摄像头发出红外光或超声波(现在也有激光的)并接收返回光线,实现测距,然后借此距离计算物距实现对焦,此方法精度略差,高端机上已较少使用,或作为其他方法的补充。第二类,图像分析法。又分为反差式和相位检测两种。反差式就是通过前文所述不断迭代过程,找到画面对比度最大时的镜头位置。相位检测是较新的技术,多用于单反相机,现渐渐开始用于手机,比如iphone6。主要原理是通过一个分离镜头(或是通过集成在主图像传感器上的一些线性传感器)产生两个光路,当对焦准确时,通过两个光路分别形成的画面之间的偏移应该等于两个光路固有相位差。相位差方法速度快,精度也较高,但需要硬件的支持。事实上测距法和相位检测法并不需要反复迭代收敛的过程,通常一次计算就能知道准确焦距位置,并在下一帧驱动镜头到达此位置完成对焦,速度快。此外还有很多组合多种对焦原理的自动对焦方式,请大家补充^_^
&不支持自动对焦的手机拍不了微距,而且拍人物容易畸变,远景更是惨
&顾名思义啊& 自动对焦就是让机器自动识别并对准焦距 手动的话则要你自己调的
区别大了,一个500w的手机拍照不一定好过一个有的手机,最直接的差距就是拍书上的东西,没的手机去拍书上的字,简直一片模糊,看不清字的,自动对焦就不会,会把字拍得很清楚
&自动对焦&就是由机器根据拍摄现场的光线被摄物体的距离等参数,自动设定快门与焦距以保证照片的最佳效果,讲白了就是俗称的"傻子相机".手机因为体积所限,不可能加上调焦、快门等把手,即使有经验的摄影师想人工干予也无从下手,这就使&自动对焦&功能尤为重要!没有&自动对焦&功能当然也能拍照,只是想拍出好照片耒运气的成份太大了. 我使用的是W800c,不管天晴天阴,也不管白炽灯节能灯,只要取景框变绿按下快门照片一定不差(照片清晰、色彩饱和及细节保留均高于一般DC)我拍的照片曝光时间从1秒到1/3000秒都有,自动对焦时间也就一秒钟左右.
&自动对焦&就是由机器根据拍摄现场的光线被摄物体的距离等参数,自动设定快门与焦距以保证照片的最佳效果,讲白了就是俗称的"傻子相机".手机因为体积所限,不可能加上调焦、快门等把手,即使有经验的摄影师想人工干予也无从下手,这就使&自动对焦&功能尤为重要!没有&自动对焦&功能当然也能拍照,只是想拍出好照片耒运气的成份太大了. 我使用的是W800c,不管天晴天阴,也不管白炽灯节能灯,只要取景框变绿按下快门照片一定不差(照片清晰、色彩饱和及细节保留均高于一般DC)我拍的照片曝光时间从1秒到1/3000秒都有,自动对焦时间也就一秒钟左右.
汗。。。瀑布汗。。。。自动对焦不是用马达的啊!! 自动对焦(Auto Focus)是利用物体光反 射的原理,将反射的光被相机上的传感器 CCD接受,通过计算机处理,带动电动对 焦装置进行对焦的方式叫自动对焦.
。。。那个如果也算马达的话,叫做驱动马达 (为什么)
手机拍照自动对焦和没有自动对焦差别在哪里?影响大吗?
当对焦准确,即被摄景物处于焦平面时,可获得最清晰的图像。一般镜头都有一定的景深,即在焦平面前后一定距离内的景物均可清晰成像,称为焦外成像。影响景深的因素有:光圈开度、焦距、物距。自动对焦手机通常能自动准确对焦,所以成像清晰。无自动对焦功能的手机是适当的设置了影响景深的参数,具有很大的景深,所以在绝大多数情况下能够获得清晰图像。
&自动对焦&(AF,是英文Auto Focus的缩写)又称为&自动调焦&,是照相机上所设的一种通过电子及机械装置自动完成对被摄物对焦,并达到使影像清晰的功能。自动对焦最主要的特点是聚焦准确性高,操作方便,特别是对被摄物的聚焦,自动对焦更具优势,同时也有利于摄影者把精力更多地集中在所拍摄的画面上。自动对焦可分为主动式自动对焦和被动式自动对焦两类。主动式自动对焦主要是利用发射红外线或超声波量度被摄物的距离,自动对焦系统根据所获得的距离资料驱动镜头调节像距,从而完成自动对焦;被动式自动对焦主要是通过接受来自被摄物的光线,以电子视测或相位差检测的方式完成自动对焦 作用很大 同样一个物体有自动对焦和没有是一个天一个地特别是拍原点的东西
作用是有的,但是不明显,原因在于,自动对焦会是整个照片最清晰的地方在你对焦的地方,比如你对着人脸对焦的时候,照出的照片中就是人脸部位最清晰。但是本身手机的设想头分辨率就不是很高,照出的照片清晰度和专业相机比起来低很多,所以脸部的稍微清晰并没有什么明显效果。如果楼主要买的手机设想头分辨率在100万像素以下,有没有自动对焦功能都无所谓,照出的照片几乎没区别。如果要买的手机设想头分辨率在100万像素以上,一般都会有自动对焦功能
手机的自动对焦和手动对焦哪个更好?& 手机没有手动对焦的,是定焦。当然是自动对焦好。
手机好像没有对焦环吧,没有的话如何手动对焦?
对焦知识:&
&简单来说,对焦就是通过改变镜头与感光元件之间的距离,让某一个特定位置的物体通过镜头的成像焦点正好落在感光元件之上,得出最清晰的影像。从无限远的平行光线通过透镜会落在镜头焦距的焦点上,所以一般的泛对焦说的就是对焦在无限远,也就是感光元件放在离镜头焦距远的位置上,而这样近处物体的成像焦点就落在了感光元件后面,造成成像模糊。而通过对焦把感光元件和镜头间的距离加大,就可以得到清晰的成像.对焦的英文学名为Focus,通常数码相机有多种对焦方式,分别是自动对焦、手动对焦和多重对焦方式。自动对焦:传统相机,采取一种类似目测测距的方式实现自动对焦,相机发射一种红外线(或其它射线),根据被摄体的反射确定被摄体的距离,然后根据测得的结果调整镜头组合,实现自动对焦。这种自动对焦方式&&直接、速度快、容易实现、成本低,但有时候会出错(相机和被摄体之间有其它东西如玻璃时就无法实现自动对焦,或者在光线不足的情况下),精度也差,如今高档的相机一般已经不使用此种方式。因为是相机主动发射射线,故称主动式,又因它实际只是测距,并不通过镜头的实际成像判断是否正确结焦,所以又称为非TTL式。这种对焦方式相对于主动式自动对焦,后来发展了被动式自动对焦,也就是根据镜头的实际成像判断是否正确结焦,判断的依据一般是反差检测式,具体原理相当复杂。因为这种方式是通过镜头成像实现的,故称为TTL自动对焦。也正是由于这种自动对焦方式基于镜头成像实现,因此对焦精度高,出现差错的比率低,但技术复杂,速度较慢(采用超声波马达的高级自动对焦镜头除外),成本也较高。手动对焦:手动对焦,它是通过手工转动对焦环来调节相机镜头从而使拍摄出来的照片清晰的一种对焦方式,这种方式很大程度上面依赖人眼对对焦屏上的影像的判别以及拍摄者的熟练程度甚至拍摄者的视力。早期的单镜反光相机与旁轴相机基本都是使用手动对焦来完成调焦操作的。现在的准专业及专业数码相机,还有单反数码相机都设有手动对焦的功能,以配合不同的拍摄需要。多重对焦:很多数码相机都有多点对焦功能,或者区域对焦功能。当对焦中心不设置在图片中心的时候,可以使用多点对焦,或者多重对焦。除了设置对焦点的位置,还可以设定对焦范围,这样,用户可拍摄不同效果的图片。常见的多点对焦为5点,7点和9点对焦。全息自动对焦全息自动对焦功能(Hologram AF),是索尼数码相机独有的功能,也是一种崭新自动对焦光学系统,采用先进激光全息摄影技术,利用激光点检测拍摄主体的边缘,就算在黑暗的环境亦能拍摄准确对焦的照片,有效拍摄距离达4.5米
img src="///e32ef3b52af32db_b.jpg" data-rawwidth="800" data-rawheight="1002" class="origin_image zh-lightbox-thumb" width="800" data-original="///e32ef3b52af32db_r.jpg"&
阅读(...) 评论() &}

我要回帖

更多关于 手动对焦 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信