2012-09-05 38 views
6

Tôi gặp sự cố khi sử dụng lớp VideoCapture với OpenCV 2.4.2 trong Windows XP 32bits. Nó không mở bất kỳ tập tin hoặc máy ảnh và sửa chữa nó là một nỗi đau. Im sử dụng studio hình ảnh 2010 nhưng tôi cũng đã thử mã trong QTcreator với cùng một kết quả.Lỗi VideoCapture OpenCV 2.4.2 trong cửa sổ

Mã kiểm tra như sau:

#include "opencv/cv.h" 
#include "opencv/highgui.h" 
#include <iostream> 
#include <string> 
#include <iomanip> 
#include <sstream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    const char* videoPath = "C:/video/"; 
    string videoName = string(videoPath) + "avi.avi"; 
    VideoCapture cap(videoName); 

    if(!cap.isOpened()) 
    { 
     std::cout<<"Fail"<<std::endl; 
     return -3; 
    } 
    return 0; 
} 

Sản lượng luôn là '-3'. Qt Creator cho thấy một cảnh báo: tập tin mở Lỗi (../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)

Tôi debugged nó và vấn đề xuất hiện trong dòng đầu tiên của:

CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename) 
{ 
    CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy; 
    if(result->open(filename)) 
     return result; 
    delete result; 
#if defined WIN32 || defined _WIN32 
    return cvCreateFileCapture_VFW(filename); 
#else 
    return 0; 
#endif 
} 

trong tệp nội bộ cap_ffmpeg.cpp.

Tôi đã thử nghiệm cùng một mã trong mac dưới báo tuyết và hoạt động. Không có bất ngờ ở đây vì nó phải là một vấn đề thư viện. Tôi đã mở tệp avi với cùng một tuyến đường bằng cách sử dụng cvCapture c-function dễ dàng và nhanh chóng. Tôi nhận được tất cả các dll của 'C: \ opencv \ opencv \ build \ x86 \ vc10 \ bin' được bao gồm trong tệp gỡ lỗi mi. Tôi đã nhận được tbb.dll và tất cả nội dung 'C: \ opencv \ opencv \ 3rdparty \ ffmpeg' cũng được đưa vào.

Điều này khiến tôi phát điên vì vậy mọi trợ giúp sẽ được đánh giá cao.

Xin cảm ơn trước.

+0

Câu trả lời đầu tiên cho [câu hỏi này] (http://stackoverflow.com/questions/1987782/why-opencvs-cvcreatecameracapture-and-cvcreatefilecapture-do-not-work-how) có thể là trường hợp của bạn: Thử sao chép opencv_ffmpeg242d .dll hoặc opencv_ffmpeg242.dll vào thư mục làm việc hiện tại của bạn. Ngoài ra, bạn đã tự mình xây dựng OpenCV chưa? Bạn có chắc chắn tất cả các phụ thuộc là ok? – Sassa

+0

Tôi vẫn gặp sự cố tương tự. Tôi đã đọc trong một số diễn đàn có thể cập nhật codec là cần thiết. Tôi sẽ cố gắng làm điều đó. bạn đã giải quyết được vấn đề? –

Trả lời

5

Trong trường hợp của tôi, cùng một vấn đề đã được giải quyết sau khi xóa tất cả opencv_***.dll tệp trong C:\Windows\System32. Vì vậy, tôi sử dụng các tập tin dll chỉ thông qua các đường dẫn như "%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin". Hãy thử nó.

+0

Cảm ơn bạn, đã làm việc! – Cits

+0

Tôi (bảo thủ) đã cố gắng chỉ để di chuyển tất cả các tập tin opencv _ *. Dll ra khỏi Windows \ System32 và cũng ra khỏi Windows \ SysWOW64. Khởi động lại, vẫn không hoạt động. Nén các dll và loại bỏ các bản gốc; Khởi động lại một lần nữa, điều này làm việc tuyệt vời! Lời đề nghị của Young-Shik Kwon rất tốt. –

3

Tôi cũng phải đối mặt với vấn đề này và giải quyết nó bằng đúng con đường của hàm:

VideoCapture cap(videoName); 

Nếu file AVI của videoName does't tồn tại, nó sẽ là một lỗi:

(../../modules/highgui/src/cap_ffmpeg_impl.hpp:XXX) 

trong đó XXX đại diện cho số dòng.

0

Tôi gặp sự cố tương tự với phương pháp mở khi chạy trong Windows 8 (64bit), opencv 2.4.10. IDE đang chạy trong x86.

Tôi thấy rằng việc chạy ứng dụng trong cấu hình bản phát hành đã giải quyết được sự cố.

Vượt qua câu trả lời vì tôi gặp vấn đề tương tự với imread. Vấn đề được trình bày trong chủ đề này. imread not working in Opencv

0

Xem bản sửa lỗi tôi tìm thấy bên dưới, đối với tệp mp4. Tôi gặp vấn đề tương tự trên Windows 7, sử dụng OpenCV 2.4.9. Tôi đang sử dụng trình bao bọc java cho opencv.

Matthias Krings đã thực hiện rất nhiều nghiên cứu cho việc này. Xem this. Rõ ràng đây là một vấn đề dựa trên loại tệp video. Với các tệp .avi, có vẻ như nó hoạt động với rất nhiều người. Thật không may giải pháp của ông về thiết lập OPENCV_DIR đã không làm việc cho tôi. Nhưng ý kiến ​​của ông trong danh sách lỗi đã cho tôi một gợi ý để khắc phục vấn đề.

Bạn cần phải làm hai việc:

  1. Set java.library.path để bao gồm các thư mục {opencv\install\dir}opencv-2.4.9\build\x86\vc10\bin. Bạn có thể đặt biến bằng cách sử dụng tùy chọn -D trên dòng lệnh java: java -Djava.library.path=PATH_TO_YOUR_DLL .... Cũng tìm nạp biến này từ môi trường của bạn, sử dụng System.getProperty(...) và in nó trước khi gọi loadLibrary(), để xác minh rằng cài đặt đường dẫn đang hoạt động.
  2. Và trong lớp java của bạn, hãy tải dll ffmpeg bằng cách sử dụng System.loadLibrary("opencv_ffmpeg249");. Hàm loadLibrary() cần được gọi từ trong một số static block trong java.
  3. Có một tệp có tên opencv_ffmpeg249.dll trong số java.library.path mà chúng tôi đã đặt.
  4. Tính năng này cũng hoạt động trên ubuntu, đối với .so tệp.
0

Tôi cũng gặp phải vấn đề tương tự và được giải quyết sau khi trỏ đến vị trí chính xác của video đầu vào.

Các vấn đề liên quan