OpenCV’de Kamera Yakalama Çözünürlüğünü Artırma
OpenCV ile webcam beslemeleri üzerinde çalışırken, birçok geliştirici çözünürlük yakalama sınırları ile karşılaşır. Logitech QuickCam IM gibi bazı webcam’lerle yaygın bir senaryo ortaya çıkar; bu webcam birkaç çözünürlük destekler ancak varsayılan olarak daha düşük bir ayara sahiptir, bu da daha yüksek kaliteli görüntü yakalamayı kısıtlar. Eğer kameranızın çözünürlüğünü 320x240 sınırlamasının ötesine geçirmek için hiç uğraştıysanız, yalnız değilsiniz. Bu soruna bir çözüm keşfedelim!
Zorluk
Webcam’inizin 640x480 ve 1280x960 gibi çözünürlükleri desteklediği bir kurulumunuz olabilir. Ancak, C/C++ OpenCV programınızda bunu ayarlamaya çalışmak genellikle başarısız kalır ve yalnızca varsayılan 320x240 çözünürlüğünde görüntüler sunar. cvSetCaptureProperty()
gibi yaygın yöntemler, bu ayarlamalar için genellikle etkili görünmez. Sorun şu: bu sınırlamayı nasıl aşabilirsiniz?
Çözüm
1. Kaynak Kodunuzu Değiştirin
Kamera çözünürlüğünü artırmak için, OpenCV topluluğunda bir kullanıcı tarafından paylaşılan bir hack uygulamanız gerekecek. Bu, bazı başlık dosyalarını değiştirmenizi ve OpenCV kurulumunuza belirli bir işlev eklemenizi içerir.
highgui.h
Dosyasına Tanımlar Ekleyin
Öncelikle, highgui.h
dosyasının işlevselliğini genişletmeniz gerekecek. Aşağıdaki tanımları ekleyin:
#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
icvSetPropertyCAM_VFW
Fonksiyonunu Uygulayın
Sonra, cvcap.cpp
dosyasında icvSetPropertyCAM_VFW
adında yeni bir fonksiyon oluşturmalısınız. Kamera özelliklerini ayarlamanın burada gerçekleşecektir:
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;
}
captureCAM_VFW_vtable
‘i Güncelleyin
Ayrıca, captureCAM_VFW_vtable
‘i şu şekilde güncellemeyi unutmayın:
static CvCaptureVTable captureCAM_VFW_vtable =
{
6,
(CvCaptureCloseFunc)icvCloseCAM_VFW,
(CvCaptureGrabFrameFunc)icvGrabFrameCAM_VFW,
(CvCaptureRetrieveFrameFunc)icvRetrieveFrameCAM_VFW,
(CvCaptureGetPropertyFunc)icvGetPropertyCAM_VFW,
(CvCaptureSetPropertyFunc)icvSetPropertyCAM_VFW, // şimdi doğru şekilde ayarlandı
(CvCaptureGetDescriptionFunc)0
};
Kütüphaneyi Yeniden Derleyin
Yukarıdaki ayarlamaları yaptıktan sonra, son adım highgui.dll
dosyanızı yeniden derlemektir. Bu entegrasyon, programınızın 640x480 gibi daha yüksek çözünürlükleri kullanmasını sağlayacak ve webcam görüntü yakalamanızı çok daha esnek hale getirecektir.
Sonuç
OpenCV’de kamera yakalamanızın çözünürlüğünü artırmak teknik bir engel olabilir, ancak doğru değişikliklerle tamamen başarılabilir. Açıklanan çözümleri uygulayarak, webcam’inizden daha yüksek kaliteli görüntüler elde edebilir ve bu temel işlevselliğe dayanan projelerinizi geliştirebilirsiniz. Varsayılan ayarların sizi kısıtlamasına izin vermeyin—webcam’inizin potansiyelini kontrol altına alın!