照相机上为啥f8所接纳的光量是f16的4倍?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了照相机上为啥f8所接纳的光量是f16的4倍?相关的知识,希望对你有一定的参考价值。

光圈的F值越小,代表的通光量就大。各级光圈之间通光量相差一倍,看到光圈的F值之间有什么规律吗?他们数值间是根号2的倍数,这是因为通光量大小是以镜片面积度量的,而F值与镜片直径有关(面积比是线段比的平方),所以当进光量扩大一倍,F值就缩小根号2(大约1.141)倍。所以当光圈扩大一级,进光量就相当于原来的2倍,扩大两级,进光量就相当于原来的4倍. 参考技术A 完整的光圈值系列如下:
f1,f1.4,f2,f2.8,f4,f5.6,f8,f11,f16,f22,f32,f44,f64
光圈f值愈小,在同一单位时间内的进光量便愈多,而且上一级的进光量刚是下一级的两倍,例如光圈从f8调整到f5.6,进光量便多一倍,我们也说光圈开大了一级。
参考技术B f8是f11的2倍 f11是f16的2倍 f8就是x2x2=4倍了 参考技术C 不能从数值上来看,光圈开孔大小不一样,它们中间刚好有4档,一档加一倍

如何在android中裁剪图像

【中文标题】如何在android中裁剪图像【英文标题】:how to crop images in android 【发布时间】:2013-11-02 16:29:16 【问题描述】:

大家好,大家正在开发一个 android 应用程序(浊度计应用程序),它可以捕获穿过水样的光并测量从水样中发出的光量,但我发现我必须能够裁剪它捕获的图像以获得正确的读数,有人可以帮助 pliz。这是我的代码行。所以当我测量从干净水中出来的光量时,我得到的值很高,即 46(NTU),但对于干净的水,该值必须低于 5(NTU)是 S.I 单位.so 我被告知该算法正在计算整个图像,而不是仅计算感兴趣的区域,即图像的亮区。

PictureCallback callback = new PictureCallback() 
       @Override
       public void onPictureTaken(byte[] data, Camera camera) 
           Log.i(TAG, "Saving a bitmap to file");


               if (OpenCVLoader.initDebug())  

               Log.d("work", "work");

                  Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length);
               Log.i("camera open", "n");

               imgToProcess=new Mat();


                  Utils.bitmapToMat(picture, imgToProcess);

                    Log.d("work", "work");

               Imgproc.cvtColor(imgToProcess, imgToProcess, Imgproc.COLOR_RGB2GRAY);

                t = Core.mean(imgToProcess).toString();

【问题讨论】:

docs.opencv.org/java/org/opencv/core/… 【参考方案1】:

这是在我的应用中完成这项工作的部分代码:

private void doCrop() 

        final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>();

        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setType("image/*");

        List<ResolveInfo> list = getPackageManager().queryIntentActivities(
                intent, 0);

        int size = list.size();

        if (size == 0) 
            Toast.makeText(this, res.getString(R.string.no_crop_app),
                    Toast.LENGTH_SHORT).show();

            return;
         else 
            intent.setData(mImageCaptureUri);

            intent.putExtra("outputX", 256);
            intent.putExtra("outputY", 256);
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            intent.putExtra("scale", true);
            intent.putExtra("return-data", true);

            if (size == 1) 
                Intent i = new Intent(intent);
                ResolveInfo res = list.get(0);

                i.setComponent(new ComponentName(res.activityInfo.packageName,
                        res.activityInfo.name));

                startActivityForResult(i, ACTIVITY_CROP_FROM_CAMERA);
             else 
                for (ResolveInfo res : list) 
                    final CropOption co = new CropOption();

                    co.title = getPackageManager().getApplicationLabel(
                            res.activityInfo.applicationInfo);
                    co.icon = getPackageManager().getApplicationIcon(
                            res.activityInfo.applicationInfo);
                    co.appIntent = new Intent(intent);

                    co.appIntent
                    .setComponent(new ComponentName(
                            res.activityInfo.packageName,
                                res.activityInfo.name));

                    cropOptions.add(co);
                

                CropOptionAdapter adapter = new CropOptionAdapter(
                        getApplicationContext(), cropOptions);

                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle(res.getString(R.string.get_crop_app));
                builder.setAdapter(adapter,
                        new DialogInterface.OnClickListener() 
                        public void onClick(DialogInterface dialog, int item) 
                            startActivityForResult(
                                    cropOptions.get(item).appIntent,
                                    ACTIVITY_CROP_FROM_CAMERA);
                        
                );

                builder.setOnCancelListener(new DialogInterface.OnCancelListener() 
                    public void onCancel(DialogInterface dialog) 
                        if (mImageCaptureUri != null) 
                            getContentResolver().delete(mImageCaptureUri, null,
                                    null);
                            mImageCaptureUri = null;
                        
                    
                );

                AlertDialog alert = builder.create();

                alert.show();
            
        


CropOption 类:

public class CropOption 
            public CharSequence title;
            public Drawable icon;
            public Intent appIntent;

以及对应的Adapter:

 class CropOptionAdapter extends ArrayAdapter<CropOption> 
    private ArrayList<CropOption> mOptions;
    private LayoutInflater mInflater;

    public CropOptionAdapter(Context context, ArrayList<CropOption> options) 
            super(context, R.layout.crop_selector, options);
            mOptions        = options;
            mInflater       = LayoutInflater.from(context);
    

    @Override
    public View getView(int position, View convertView, ViewGroup group) 
            if (convertView == null)
                    convertView = mInflater.inflate(R.layout.crop_selector, null);

            CropOption item = mOptions.get(position);

            if (item != null) 
                    ((ImageView) convertView.findViewById(R.id.iv_crop_icon)).setImageDrawable(item.icon);
                    ((TextView) convertView.findViewById(R.id.tv_crop_name)).setText(item.title);

                    return convertView;
            

            return null;
    

【讨论】:

以上是关于照相机上为啥f8所接纳的光量是f16的4倍?的主要内容,如果未能解决你的问题,请参考以下文章

F8和F5.6 差多少暴光量?

WPF三维图形

把光圈调到f8以下是F5.6还是F9?单反焦距50mm以上是啥意思

照相机模型与增强现实

如何计算LED灯管的光通量(流明值)?

UWP 调用系统拍照程序