2011-09-29 22 views
6

Tôi đang cố gắng biên dịch facedetect.cpp trong thư mục OpenCV \ Samples \ C, trong Visual Studio 2010. Dự án biên dịch và bắt đầu tốt, hiển thị bản xem trước của máy ảnh của tôi , và sau đó dường như sụp đổ tại cascade.detectMultiScale() ngay sau khi nó phát hiện một khuôn mặt. Tôi kết luận rằng OpenCV nghĩ rằng tôi quá xấu xí.OpenCV 2.1: facesetect.cpp gặp sự cố khi tìm thấy khuôn mặt xấu xí

Unhandled exception at 0x100342bf in HeadTrackerExample.exe: 0xC0000005: Access violation writing location 0x00000000.

Thật không may là thông tin gỡ lỗi không cho tôi thăm dò sâu hơn. Tôi đang liên kết với cv210.lib; cxcore210.lib; highgui210.lib; các phiên bản debug sẽ không làm việc:

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002

Tôi sẽ cố gắng để đánh lừa các phân loại với một bản in của Anne Hathaway nhưng tôi mở để gợi ý khác.

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/facedetect.cpp

+2

Chưa có đầu mối, nhưng +1 có cảm giác hài hước. –

+0

Bạn có thể hiển thị mã cho chúng tôi để chúng tôi có thể thấy lệnh gọi của bạn tới 'cascade.detectMultiScale()' không? Hoặc là mã quá xấu xí? :-) – SSteve

+0

Mã hiện được liên kết trong câu hỏi! Như bạn có thể thấy, đó chỉ là mã mẫu được bao gồm, vì vậy có thể có sự cố với hệ thống của tôi hoặc cấu hình dự án của tôi. –

Trả lời

0

Tôi đã dành cả ngày để sửa lỗi này. Ai biết tại sao nó bị rơi? Tôi không thể liên kết đến các DLL lỗi nên chúng tôi sẽ không bao giờ biết. Tôi đã tải xuống bản phân phối OpenCV-2.1.0-win32-vs2008.exe. Và tôi đang sử dụng Visual Studio 2010. Do đó, exe bị đâm với

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002 Debugger:: An unhandled non-continuable exception was thrown during process load The program '[5172] HeadTrackerExample.exe: Native' has exited with code -1072365566 (0xc0150002).

Đây là "0xc0150002 lỗi". Theo Dependency Walker, các DLL gỡ lỗi OpenCV đang cố gắng tìm msvcr90d.dll và msvct90d.dll, các DLL runtime runtime của Visual Studio 2008. Vâng, tôi có được những điều này và nó vẫn không hoạt động, vì vậy sau đó điều này được vào sidebyside Windows bí truyền và các công cụ biểu hiện.

Tôi đã chuyển sang bản phân phối OpenCV-2.3.1-win-superpack.exe và hiện đang hoạt động.

1

Tôi đoán tôi đang tìm tốt hơn so với bạn bởi vì nó làm việc ở đây (theo OS X). Bạn có chắc là bạn đang tải thành công các tệp xml không? Bạn có đang sử dụng các tệp xml mặc định (haarcascade_frontalface_alt.xml và haarcascade_eye_tree_eyeglasses.xml) không?

Có vẻ như bạn có con trỏ rỗng. Thử đặt điểm ngắt tại cuộc gọi tới cascade.detectMultiScale() và kiểm tra các giá trị của cascade, smallImg, smallImg.datafaces.

Edit: populating faces vector

Dưới đây là đoạn code detectMultiScale:

void HaarClassifierCascade::detectMultiScale(const Mat& image, 
         Vector<Rect>& objects, double scaleFactor, 
         int minNeighbors, int flags, 
         Size minSize) 
{ 
    MemStorage storage(cvCreateMemStorage(0)); 
    CvMat _image = image; 
    CvSeq* _objects = cvHaarDetectObjects(&_image, cascade, storage, scaleFactor, 
              minNeighbors, flags, minSize); 
    Seq<Rect>(_objects).copyTo(objects); 
} 

Nó không chạm vào vector faces cho đến dòng cuối cùng sau khi tất cả các phát hiện được thực hiện. Nếu bạn thích mạo hiểm, bạn có thể ném một số câu lệnh printf vào đây để xem nếu cvHaarDetectObjects đang hoàn tất và nếu nó trả về một con trỏ rỗng.

+0

vâng, xml tải tốt. Mẹo gỡ lỗi tốt, tôi sẽ thử. Tuy nhiên, các cuộc gọi detectMultiScale hoàn thành thành công * cho đến khi * nó tìm thấy một khuôn mặt, điều đó làm cho tôi nghĩ rằng có một vấn đề khi nó cố gắng để điền vào 'faces' vector (truy cập theo tham chiếu) –

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