Meningkatkan Resolusi Tangkap Kamera di OpenCV

Saat bekerja dengan aliran webcam di OpenCV, banyak pengembang mengalami batasan pada resolusi tangkap. Skenario umum muncul dengan webcam seperti Logitech QuickCam IM, yang mendukung beberapa resolusi tetapi secara default menggunakan pengaturan yang lebih rendah, membatasi tangkapan gambar berkualitas tinggi. Jika Anda pernah berjuang untuk meningkatkan resolusi kamera Anda melewati batas frustasi 320x240, Anda tidak sendirian. Mari kita telusuri solusi untuk masalah ini!

Tantangan

Anda mungkin memiliki pengaturan di mana webcam Anda mendukung resolusi seperti 640x480 dan 1280x960. Namun, upaya untuk menyesuaikan ini dalam program OpenCV C/C++ Anda bisa menjadi sia-sia, hanya memberikan gambar pada resolusi default 320x240. Metode umum yang menggunakan cvSetCaptureProperty() seringkali tampak tidak efektif untuk penyesuaian ini. Pertanyaannya adalah: bagaimana Anda bisa terbebas dari batasan ini?

Solusi

1. Modifikasi Kode Sumber Anda

Untuk meningkatkan resolusi kamera, Anda perlu menerapkan sebuah hack yang dibagikan oleh seorang pengguna di komunitas OpenCV. Ini melibatkan memodifikasi beberapa file header dan menambahkan fungsi tertentu ke pengaturan OpenCV Anda.

Tambahkan Definisi ke highgui.h

Pertama, Anda perlu memperluas fungsionalitas highgui.h. Tambahkan definisi berikut:

#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

Implementasikan Fungsi icvSetPropertyCAM_VFW

Selanjutnya, Anda harus membuat fungsi baru bernama icvSetPropertyCAM_VFW di cvcap.cpp. Di sinilah pekerjaan untuk mengatur properti kamera akan berlangsung:

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;
}

Perbarui captureCAM_VFW_vtable

Selain itu, pastikan untuk memperbarui captureCAM_VFW_vtable seperti berikut:

static CvCaptureVTable captureCAM_VFW_vtable =
{
    6,
    (CvCaptureCloseFunc)icvCloseCAM_VFW,
    (CvCaptureGrabFrameFunc)icvGrabFrameCAM_VFW,
    (CvCaptureRetrieveFrameFunc)icvRetrieveFrameCAM_VFW,
    (CvCaptureGetPropertyFunc)icvGetPropertyCAM_VFW,
    (CvCaptureSetPropertyFunc)icvSetPropertyCAM_VFW, // sekarang disetel dengan benar
    (CvCaptureGetDescriptionFunc)0
};

Bangun Ulang Library

Setelah melakukan penyesuaian di atas, langkah terakhir adalah membangun ulang highgui.dll Anda. Integrasi ini akan memungkinkan program Anda untuk memanfaatkan resolusi yang lebih tinggi seperti 640x480, menjadikan tangkapan gambar webcam Anda jauh lebih serbaguna.

Kesimpulan

Meningkatkan resolusi tangkapan kamera Anda di OpenCV bisa menjadi hambatan teknis, tetapi dengan modifikasi yang tepat, hal ini sepenuhnya dapat dicapai. Dengan menerapkan solusi yang dijelaskan, Anda dapat membuka potensi pengambilan gambar berkualitas lebih tinggi dari webcam Anda, meningkatkan proyek-proyek yang bergantung pada fungsionalitas penting ini. Jangan biarkan pengaturan default menghalangi Anda—ambil kendali atas potensi webcam Anda!