Como definir o foco de uma webcam ou qualquer outra câmera usando OpenCV
Webcams com foco fixo
A maioria das webcams (leia-se barato) são sistemas de imagem de foco fixo onde não temos nenhum componente óptico para mudar (lentes, abertura), etc. A distância focal padrão para fabricantes de webcam de foco fixo é de aproximadamente 1,5 metros da câmera. Este valor garante que uma distância suficientemente grande esteja sob foco aceitável.
Figure 1: Bastante perto da minha webcam. O texto é legível.
Figure 2: Um pouco mais atrás (por favor ignore o reflexo brilhante, minha janela está diretamente na minha frente - eu sei, eu sei... eu preciso de cortinas).
Note como na figura 1, meu rosto e o texto na minha garrafa de desodorante está dentro de um intervalo aceitável de clareza (por clareza, quero dizer, é legível e razoavelmente crocante), mesmo que estejam a distâncias diferentes. Isto nos mostra que mesmo que "fixemos" a distância focal de uma webcam, ainda podemos obter imagens razoavelmente claras - um conceito encontrado na maioria das webcams.
Como pode ser visto na figura 2, o texto é agora dificilmente legível. Portanto, você deve se preocupar com a densidade de pixels e resolução (em uma webcam) antes de se preocupar com o foco inadequado, pois esse será o fator limitante.
OpenCV fornece acesso a quase todos os aspectos de uma webcam. Verifique este link para uma descrição detalhada:
cv::VideoCapture Class Reference
I'll paste it out for you:
>ul>>li>CAP_PROP_POS_MSEC Posição atual do arquivo de vídeo em milisegundos ou timestamp de captura de vídeo.<CAP_PROP_POS_FRAMES Índice 0 do frame a ser descodificado/capturado a seguir.CAP_PROP_POS_AVI_RATIO Posição relativa do ficheiro de vídeo: 0 - início do filme, 1 - fim do filme.CAP_PROP_FRAME_WIDTH Largura dos frames no fluxo de vídeo.CAP_PROP_FRAME_HEIGHT Altura dos frames no fluxo de vídeo.CAP_PROP_FPS Taxa de quadros.CAP_PROP_FOURCC Código de 4 caracteres do codec.CAP_PROP_FRAME_COUNT Número de quadros no arquivo de vídeo.CAP_PROP_FORMAT Formato dos objetos Mat retornados por retrieve() .CAP_PROP_MODE Valor específico do Backend indicando o modo de captura atual.CAP_PROP_BRIGHTNESS Brilho da imagem (somente para câmeras).>CAP_PROP_CONTRAST Contraste da imagem (somente para câmeras).CAP_PROP_SATURATION Saturation of the image (only for cameras).CAP_PROP_HUE Hue of the image (only for cameras).CAP_PROP_GAIN Gain of the image (only for cameras).CAP_PROP_EXPOSURE Exposure (only for cameras).CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.CAP_PROP_WHITE_BALANCE Currently not supportedCAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)Autofocus webcams
These webcams have a tiny motor which change the aperture and pixel gain to get the best possible focus. IF your webcam supports autofocus, then you will observe another “focus” parameter which can be accessed like this:
- cap = cv2.VideoCapture(1) # Generate camera object
- cap.set(cv2.CAP_PROP_AUTOFOCUS, 0) # turn the autofocus off
- cap.set(3, 1280) # set the Horizontal resolution
- cap.set(4, 720) # Set the Vertical resolution
Careful though, some webcam manufacturers don’t let you change webcam focussing parameters and it’s best to do a thorough search before purchasing the a webcam.
Manual focus in a DSLR camera
This section is out of scope for this question but the best way to start is by using 3rd party software like:
DigiCamControl
Easy to use, free solution for complex camera control
It’s awesome!