본문 바로가기

C#

웹캠 포커스 강제 설정방법

로지텍 캠의 고질적인 문제는 오토포커스 설정이 재부팅 시 원복 된다는 점이다. 

그러나 아래의 DirectShow  를 이용한 메서드 들로 해결 할 수 있다.



( 출처 :  http://stackoverflow.com/questions/18124646/manually-focus-camera-in-emgu-cv)


        private void SetCameraControl()
        {
            Console.WriteLine("Camera Setting ! ");

            DsDevice dev = GetPCCamDev();
            if (dev == null) return;

            IFilterGraph2 graphBuilder = new FilterGraph() as IFilterGraph2;
            IBaseFilter capFilter = null;
            if (graphBuilder != null)
                graphBuilder.AddSourceFilterForMoniker(dev.Mon, null, dev.Name, out capFilter); //getting capture filter for converting it into IAMCameraControl
            IAMCameraControl _camera = capFilter as IAMCameraControl;
            _camera.Set(CameraControlProperty.Focus, 0, CameraControlFlags.Manual); //Setting focus to macro (in my camera, range between 0 - 250)
        }

        private DsDevice GetPCCamDev()
        {
            DsDevice[] devs = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
            foreach (var item in devs)
            {
                if (item.Name.StartsWith("Point Grey") == true) continue;

                Console.WriteLine(item.Name);
            }
            return devs[0];
        }