2010-12-13 18 views
9

Ben OpenCV 2.2 yükledim ve şimdi kamerası yakalama çalışması için alınamıyor. 2.1'de işe yaradı. OpenCV, bir web kamerası algılar herhangi bir hata veya uyarı bildirmez, ancak her kare gri bir görüntüdür.OpenCV kamerası yakalama sorun

VideoCapture cap(0); // open the default camera 
if(!cap.isOpened()) // check if we succeeded 
    return -1; 

Mat edges; 
namedWindow("edges",1); 
for(;;) 
{ 
    Mat frame; 
    cap >> frame; // get a new frame from camera 
    cvtColor(frame, edges, CV_BGR2GRAY); 
    //GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
    //Canny(edges, edges, 0, 30, 3); 
    imshow("edges", edges); 
    if(waitKey(30) >= 0) break; 
} 
// the camera will be deinitialized automatically in VideoCapture destructor 
return 0; 

herkes bu sorunu çalıştırmak istediniz: Hatta OpenCV wiki bir kod örneğini çalıştı? 64bit Win7 ve Visual Studio 2010 kullanıyorum.

+2

sen ne demek istiyorsunuz " gri bir görüntü "? Katı gri, yapısız mı? Ya da sadece gri tonlamalı bir resim mi? Görüntüyü gri tonlamak için cvtColor() öğesini çağırıyorsunuz ve imshow() çağrısı gri tonlamalı sürümü gösteriyor ... – jtdubs

+0

Gri, gri tonlu değil. – Figaro

+0

Bazen bu ib biraz yavaştır. Mat kenarından önce 'sleep (1)' veya 'cv :: waitKey (100)' ekleyin ve for döngüsünün içine ekleyin. Bu çalışmalı. Ve 'frame' prper bir görüntü ise chekc unutmayın. – nutario

cevap

1

Gerçekten OpenCV hakkında hiçbir şey bilmiyorum, ama şu satırdaki sorun değil mi? kasıtlı bir Gri boşluğa, bir B-G-R renk alanı dönüştürücü gibi

cvtColor(frame, edges, CV_BGR2GRAY); 

görünüyor. Çok uzun bir aramadan sonra çözüm buldu

cvtColor(frame, edges, CV_BGR2RGB); 
+0

en kenar algoritmaları sadece gri tonlama görüntülerde çalışmak algılamak - op orijinal rengin yerine gri tonlama görseli ben ... :) ben konuyu düşündüm bilmiyorum bir konuda fikrimi vererek problem tek –

+0

gri tonlamalı görüntüydi, gri bir görüntü değil ... Aptal ben. :) – Machado

9

: bir şey gibi

olması gerekmiyor.

Sorun, çerçevelerin gösterilmesi arasında bir gecikme olmaması durumunda bu soruna neden olmasıdır.

Çözüm, cvWaitKey(20); döngüsüne yerleştirilir.

+1

Sadece bu sorunu giderdim bir yorum eklemek istedim! Teşekkürler :) – amr

3

Sorun, kullandığım kamera ile birlikte, MSFT LifeCam idi. Logitech C210 ve 120'yi denedim ve ikisi de iyi çalışıyor.

0

Ayrıca this post bir göz atmayı deneyebilirsiniz.

cv olarak

ithalat cv den

değişen, basit

ithalat cv2.cv koymak için

benim için çalıştı. Ayrıca bkz. here.

3

Çözüm İşte.

Yakalanan her görüntü karesi, aşağıdaki ilk satırda gri tonlamalı resme dönüştürülür. Yalnızca kodun yorumlanması ve çalıştırılması, herhangi bir işlenmiş görüntüyü, imshow'da görüntülenen kenar çerçevesine yakalamadığınızdan beri bir hata gösterecektir.

Bu nedenle cvtColor satırını yorumlayın ve ikinci parametreyi imshow - frame olarak değiştirin. Bu, renkli videoyu web kamerasından görüntülemenizi sağlar.

cvtColor(frame, edges, CV_BGR2GRAY); 

imshow("edges", frame); 
0

Aynı problem vardı. Kameramdaki ayarların olabileceğini düşündüm, çünkü 640x480px'lik bir girişe sahip olmam gerekiyordu (bunu ayarlayamadım) ve feed için izinleri ayarlayamadım. Bu yüzden her iki sorunu da çözen sanal bir web kamerası kurdum. Giriş diyaloğum var, sanal kamerayı seçtim ve işe yaradı. Uygulamada da 640x480'e ayarlamayı başardım.

Sanal kameramın adı ManyCam, ancak genç kızlar için yapılmış gibi görünüyor, diğer 3 uygulamayı yüklememi istedim ve hala 'tamamlayıcı' truva atlarıyla gelmediğinden emin değilim. Renkleri, tonunu ayarlamak

Ancak sağlar, vb kontrast ve diğer şeyler test için gerekebilir.

+0

Bir sanal kamera ekleyerek accetable olup olmadığını sormak için önce bir yorum bırakın. – StarPinkER

0

Ben cvtColor kullanarak ve

cvtColor(image,image,CV_BGR2RGB); işe yaramadı bulundu duyuyorum.

Ama iyi haber bu değişimin işidir!

cvtColor(image,image,**COLOR_BGR2RGB**); 

Ayrıca şunlardır:

-lopencv_imgproc 
0

bu deneyin:

include opencv2/imgproc/imgproc.hpp 

ve .pro dosyasında kütüphane

VideoCapture cap(0); // open the default camera 
if(!cap.isOpened()) // check if we succeeded 
{ 
    cout<<"Cam not captured\n"; 
} 

Mat frame; 
namedWindow("frame"); 
for(;;) 
{ 
    cap >> frame; // get a new frame from camera 
    imshow("frame", frame); 

    if(waitKey(10) >= 0) break; 
} 

return 0;