Aumentando a Resolução de Captura de Câmera no OpenCV

Ao trabalhar com feeds de webcam no OpenCV, muitos desenvolvedores encontram limites na captura de resolução. Um cenário comum surge com webcams como a Logitech QuickCam IM, que suporta várias resoluções, mas tem a configuração padrão em um nível inferior, restringindo capturas de imagem de qualidade superior. Se você já teve dificuldades em melhorar a resolução da sua câmera além da frustrante limitação de 320x240, você não está sozinho. Vamos explorar uma solução para esse problema!

O Desafio

Você pode ter uma configuração onde sua webcam suporta resoluções como 640x480 e 1280x960. No entanto, tentativas de ajustar isso em seu programa OpenCV C/C++ podem permanecer em vão, entregando apenas imagens na resolução padrão de 320x240. O método comum que utiliza cvSetCaptureProperty() muitas vezes parece ineficaz para esses ajustes. A pergunta é: como você pode se libertar dessa limitação?

A Solução

1. Modifique Seu Código-Fonte

Para aumentar a resolução da câmera, você precisará implementar um truque compartilhado por um usuário na comunidade OpenCV. Isso envolve modificar alguns arquivos de cabeçalho e adicionar uma função específica à sua configuração do OpenCV.

Adicione Definições ao highgui.h

Primeiro, você precisa expandir a funcionalidade do highgui.h. Adicione as seguintes definições:

#define CV_CAP_PROP_DIALOG_DISPLAY 8
#define CV_CAP_PROP_DIALOG_FORMAT 9
#define CV_CAP_PROP_DIALOG_SOURCE 10
#define CV_CAP_PROP_DIALOG_COMPRESSION 11
#define CV_CAP_PROP_FRAME_WIDTH_HEIGHT 12

Implemente a Função icvSetPropertyCAM_VFW

Em seguida, você deve criar uma nova função chamada icvSetPropertyCAM_VFW em cvcap.cpp. É aqui que as operações de configuração das propriedades da câmera ocorrerão:

static int icvSetPropertyCAM_VFW( CvCaptureCAM_VFW* capture, int property_id, double value )
{
    int result = -1;
    CAPSTATUS capstat;
    CAPTUREPARMS capparam;
    BITMAPINFO btmp;

    switch( property_id )
    {
        case CV_CAP_PROP_DIALOG_DISPLAY:
            result = capDlgVideoDisplay(capture->capWnd);
            break;

        case CV_CAP_PROP_DIALOG_FORMAT:
            result = capDlgVideoFormat(capture->capWnd);
            break;

        case CV_CAP_PROP_DIALOG_SOURCE:
            result = capDlgVideoSource(capture->capWnd);
            break;

        case CV_CAP_PROP_DIALOG_COMPRESSION:
            result = capDlgVideoCompression(capture->capWnd);
            break;

        case CV_CAP_PROP_FRAME_WIDTH_HEIGHT:
            capGetVideoFormat(capture->capWnd, &btmp, sizeof(BITMAPINFO));
            btmp.bmiHeader.biWidth = floor(value/1000);
            btmp.bmiHeader.biHeight = value - floor(value/1000) * 1000;
            btmp.bmiHeader.biSizeImage = btmp.bmiHeader.biHeight * btmp.bmiHeader.biWidth * btmp.bmiHeader.biPlanes * btmp.bmiHeader.biBitCount / 8;
            capSetVideoFormat(capture->capWnd, &btmp, sizeof(BITMAPINFO));
            break;

        default:
            break;
    }

    return result;
}

Atualize o captureCAM_VFW_vtable

Além disso, certifique-se de atualizar o captureCAM_VFW_vtable assim:

static CvCaptureVTable captureCAM_VFW_vtable =
{
    6,
    (CvCaptureCloseFunc)icvCloseCAM_VFW,
    (CvCaptureGrabFrameFunc)icvGrabFrameCAM_VFW,
    (CvCaptureRetrieveFrameFunc)icvRetrieveFrameCAM_VFW,
    (CvCaptureGetPropertyFunc)icvGetPropertyCAM_VFW,
    (CvCaptureSetPropertyFunc)icvSetPropertyCAM_VFW, // agora configurado corretamente
    (CvCaptureGetDescriptionFunc)0
};

Reconstrua a Biblioteca

Após fazer os ajustes acima, o passo final é reconstruir seu highgui.dll. Esta integração permitirá que seu programa utilize resoluções superiores, como 640x480, tornando a captura de imagem da sua webcam muito mais versátil.

Conclusão

Aumentar a resolução da captura da sua câmera no OpenCV pode ser um obstáculo técnico, mas com as modificações certas, é totalmente possível. Ao implementar as soluções descritas, você pode desbloquear imagens de maior qualidade da sua webcam, aprimorando seus projetos que dependem dessa funcionalidade crucial. Não deixe que as configurações padrão o impeçam—assuma o controle do potencial da sua webcam!