2010-12-13 40 views
9

Tôi đã cài đặt OpenCV 2.2 và bây giờ tôi không thể chụp webcam để hoạt động. Nó hoạt động tốt trong phiên bản 2.1. OpenCV phát hiện một webcam, không báo cáo bất kỳ lỗi hoặc cảnh báo nào, nhưng mỗi khung là một hình ảnh màu xám. Tôi thậm chí đã thử một mẫu mã từ wiki OpenCV:Vấn đề chụp webcam OpenCV

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; 

Có ai gặp phải vấn đề này không? Tôi đang sử dụng 64bit Win7 và Visual Studio 2010.

+2

Ý anh là gì bởi " một hình ảnh màu xám "? Màu xám, không có cấu trúc? Hoặc, chỉ là một hình ảnh màu xám? Bạn đang gọi cvtColor() để grayscale hình ảnh, và các imshow() gọi là hiển thị phiên bản màu xám ... – jtdubs

+0

Rắn màu xám, không phải màu xám. – Figaro

+0

Thỉnh thoảng ib này hơi chậm. Thêm một 'sleep (1)' hoặc 'cv :: waitKey (100)' trước Mat edge và thêm vào bên trong vòng lặp for. Điều này sẽ làm việc. Và đừng quên chekc nếu 'frame' là một hình ảnh prper. – nutario

Trả lời

1

Tôi thực sự không biết gì về OpenCV, nhưng không phải là vấn đề trên dòng sau?

cvtColor(frame, edges, CV_BGR2GRAY); 

Có vẻ như bạn đang cố ý chuyển đổi không gian màu B-G-R thành không gian thang xám.

nên không nó có cái gì đó như:

cvtColor(frame, edges, CV_BGR2RGB); 
+0

hầu hết các thuật toán phát hiện cạnh chỉ hoạt động trên hình ảnh thang độ xám - op hiển thị hình ảnh thang độ xám thay vì màu gốc –

+0

Đó là vấn đề bằng cách đưa ra ý kiến ​​của tôi về một vấn đề mà tôi không biết ... :) Tôi nghĩ vấn đề là hình ảnh màu xám, không phải là một hình ảnh màu xám ... Silly me. :) – Machado

9

Tôi tìm thấy giải pháp sau khi tìm kiếm rất lâu.

Vấn đề là nếu không có sự chậm trễ giữa việc hiển thị khung xảy ra sự cố này.

Giải pháp được đặt cvWaitKey(20); trong vòng lặp.

+1

Chỉ muốn thêm nhận xét rằng điều này đã khắc phục được sự cố của tôi! Cảm ơn :) – amr

3

Sự cố xảy ra với máy ảnh tôi đã sử dụng, MSFT LifeCam. Tôi đã thử Logitech C210 và 120 và cả hai đều hoạt động tốt.

0

Bạn cũng có thể thử xem this post.

Nói một cách đơn giản, thay đổi

từ

nhập khẩu cv

để

cv2.cv nhập khẩu theo cv

đã làm việc cho tôi. Xem thêm bài viết here.

3

Đây là Giải pháp.

Mỗi khung hình được chụp đang được chuyển đổi thành hình ảnh thang độ xám ở dòng đầu tiên bên dưới. Nhận xét và chạy mã một mình sẽ hiển thị lỗi vì bạn không chụp bất kỳ hình ảnh được xử lý nào vào khung cạnh, được hiển thị trong imshow.

Do đó, hãy nhận xét dòng cvtColor và thay đổi tham số thứ hai trong imshow thành frame. Điều này sẽ cho phép bạn hiển thị video màu từ webcam.

cvtColor(frame, edges, CV_BGR2GRAY); 

imshow("edges", frame); 
0

Tôi cũng gặp vấn đề tương tự. Tôi nhận ra rằng nó có thể là cài đặt trên máy ảnh của tôi, bởi vì tôi được cho là có đầu vào 640x480px (mà tôi không thể điều chỉnh) và tôi không thể điều chỉnh các quyền cho nguồn cấp dữ liệu. Vì vậy, tôi đã cài đặt một webcam ảo, trong đó khá nhiều giải quyết cả hai vấn đề. Tôi có một cuộc đối thoại đầu vào, chọn máy ảnh ảo và nó hoạt động. Tôi cũng đã cài đặt nó lên 640x480 trong ứng dụng.

Máy ảnh ảo của tôi được gọi là ManyCam, nhưng có vẻ như nó được làm cho các cô gái tuổi teen, muốn tôi cài đặt 3 ứng dụng khác và tôi vẫn không chắc rằng thời tiết không đi kèm với trojan bổ sung.

Tuy nhiên, nó cho phép bạn điều chỉnh màu sắc, màu sắc, độ tương phản vv và các nội dung khác mà bạn có thể cần để thử nghiệm.

+0

Bạn nên để lại nhận xét trước để hỏi xem việc thêm máy ảnh ảo có thể được chấp nhận hay không. – StarPinkER

0

Tôi đang sử dụng cvtColor và thấy rằng

cvtColor(image,image,CV_BGR2RGB); đã không làm việc.

Nhưng tin tốt là công việc thay đổi này !!

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

Cũng bao gồm:

include opencv2/imgproc/imgproc.hpp 

và trong file .pro thư viện:

-lopencv_imgproc 
0

Hãy thử điều này:

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; 
Các vấn đề liên quan