2013-12-03 3 views
0

Я прочитал много из другого решения, но я до сих пор путают, что я должен делать с моим ...OpenCV Ошибка: не удалось Assertion <SCN == 3 :: SCN == 4> в неизвестной функции,

#include <opencv2/objdetect/objdetect.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

#include <iostream> 
#include <stdio.h> 

using namespace std; 
using namespace cv; 

int main(int argc, const char** argv) 
{ 
    //create the cascade classifier object used for the face detection 
    CascadeClassifier face_cascade; 
    //use the haarcascade_frontalface_alt.xml library 
    face_cascade.load("haarcascade_frontalface_alt.xml"); 

    //setup video capture device and link it to the first capture device 
    VideoCapture captureDevice; 
    captureDevice.open(0); 

    //setup image files used in the capture process 
    Mat captureFrame; 
    Mat grayscaleFrame; 

    //create a window to present the results 
    namedWindow("outputCapture", 1); 

    //create a loop to capture and find faces 
    while (true) 
    { 
     //capture a new image frame 
     captureDevice >> captureFrame; 

     //convert captured image to gray scale and equalize 
     cvtColor(captureFrame, grayscaleFrame, CV_BGR2GRAY); 
     equalizeHist(grayscaleFrame, grayscaleFrame); 

     //create a vector array to store the face found 
     std::vector<Rect> faces; 

     //find faces and store them in the vector array 
     face_cascade.detectMultiScale(grayscaleFrame, faces, 1.1, 3, CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_SCALE_IMAGE, Size(30, 30)); 

     //draw a rectangle for all found faces in the vector array on the original image 
     for (int i = 0; i < faces.size(); i++) 
     { 
      Point pt1(faces[i].x + faces[i].width, faces[i].y + faces[i].height); 
      Point pt2(faces[i].x, faces[i].y); 

      rectangle(captureFrame, pt1, pt2, cvScalar(0, 255, 0, 0), 1, 8, 0); 
     } 

     //print the output 
     imshow("outputCapture", captureFrame); 

     //pause for 33ms 
     waitKey(33); 
    } 
    return 0; 
} 

Это ошибка

OpenCV Error: Assertion failed in unknown function

Похоже, что ошибка произошла после «captureDevice >> captureFrame;» Пожалуйста, направляйте меня, это снимает изображение с камеры.

+0

Вы забыли включить 'cv.h'. – scap3y

+0

Я проверил онлайн об этом, в основном, если я написал opencv2, они никогда не называют cv.h. Я попытался это выразить, но это не изменилось. btw, это успешно созданная только проблема во время отладки. – Klenz

ответ

0

Хорошо, я думаю, что знаю, что произошло. Я попробовал запустить программу, и она отлично работала.

Возможно, вы не связали необходимые DLL-файлы. Убедитесь, что (в случае, если вы используете Windows) ваш opencv/bin включен в переменные среды. Это мой CMakeLists.txt файл, чтобы сделать вещи проще для вас,

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 
project(SO_example) 

FIND_PACKAGE(OpenCV REQUIRED) 

SET (SOURCES 
    #VTKtoPCL.h 
    main.cpp 
    ) 

add_executable(so_example ${SOURCES}) 
target_link_libraries(so_example ${OpenCV_LIBS}) 
+0

Это мой первый раз, используя opencv, я следую онлайн-установке о ярлыке в переменных среды и создании OPENCV_DEBUG.pps. Если то, что означает u со связанными необходимыми объектами dll, каждый раз, когда он спрашивал, я копирую в папку «debug». Если бы вы имели в виду не то, о чем я говорил, пожалуйста, направляйте меня шаг за шагом. Мне жаль, что я все еще учился. – Klenz

+0

Вам определенно не нужно это делать. Следуйте инструкциям [здесь] (http://docs.opencv.org/doc/tutorials/introduction/windows_install/windows_install.html). После того, как вы все сделали (включая настройку переменных окружения), затем используйте файл CMakeLists, который я разместил, и ваша программа должна работать нормально. – scap3y

+0

Привет, я загружал его, но он всегда терпел неудачу посередине. худшая часть, я даже не знаю, как возобновить и снова перезапустить. это тратит время. есть ли какой-либо другой способ, а не ждать загрузки. ожидали целый день и продолжали сбой – Klenz

1

Похоже VideoCapture не может захватить кадр из камеры. Добавьте этот код, чтобы проверить результат кадра захвата:

//create a loop to capture and find faces 
while (true) 
{ 
    //capture a new image frame 
    captureDevice >> captureFrame; 
    if (captureFrame.empty()) 
    { 
     cout << "Failed to grab frame" << endl; 
     break; 
    } 
    ... 

Если это проблема VideoCapture проверки, что вы установили драйвера для вашей камеры.

+0

Да, это отображение «не удалось», есть ли другой способ, а не устанавливать драйверы? В прошлый раз я использую код, который использует вещи SDK, и он отлично работал без проблем. – Klenz

+0

Какая ОС вы используете и какую версию OpenCV? Как я знаю, версия 2.4.6 имела некоторые проблемы с видео на Linux, и проблема была исправлена ​​в 2.4.6.1. – jet47

+0

windows 8, opencv 247 – Klenz

Смежные вопросы