2013-11-25 3 views
1

Я новичок в openCV, и, наконец, я получил его, чтобы открыть окно и показать выход веб-камеры. Теперь я пытаюсь преобразовать рамки в оттенки серого, прежде чем отображать их. К сожалению, каждый раз, когда я пытаюсь скомпилировать, я получаю следующую ошибку. error: ‘cvCvtColor’ was not declared in this scope Я использую следующую строку для компиляцииOpenCV cvCvtColor не связан?

г ++ main.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect -o камера

Могу ли я связывая мой код неправильно? Вот полный список кодов. Извините за мои проблемы с форматированием!

#include "opencv2/objdetect/objdetect.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/core/core.hpp" 

#include <stdio.h> 
#include <unistd.h> 


IplImage* getCameraFrame(CvCapture* &camera) 
{ 
    IplImage *frame; 
    int w, h; 

    // If the camera hasn't been initialized, then open it. 
    if (!camera) { 
     printf("Acessing the camera ...\n"); 
     camera = cvCreateCameraCapture(0); 
     if (!camera) { 
     printf("Couldn't access the camera.\n"); 
     exit(1); 
    } 
    // Try to set the camera resolution to 320 x 240. 
    cvSetCaptureProperty(camera, CV_CAP_PROP_FRAME_WIDTH, 320); 
    cvSetCaptureProperty(camera, CV_CAP_PROP_FRAME_HEIGHT, 240); 
    // Get the first frame, to make sure the camera is initialized. 
    frame = cvQueryFrame(camera); 
    if (frame) { 
     w = frame->width; 
     h = frame->height; 
     printf("Got the camera at %dx%d resolution.\n", w, h); 
    } 
    // Wait a little, so that the camera can auto-adjust its brightness. 
    sleep(1); // (in milliseconds) 
    } 

    // Wait until the next camera frame is ready, then grab it. 
    frame = cvQueryFrame(camera); 
    if (!frame) { 
    printf("Couldn't grab a camera frame.\n"); 
    exit(1); 
    } 
return frame; 
} 

int main(int argc, char* argv[]) 
{ 
    cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE); 
    CvCapture* capture = cvCreateCameraCapture(0); 
    IplImage* frame; 

    while(1) { 
    frame = cvQueryFrame(capture); 
    if(!frame) break; 

     cvCvtColor(frame, frame, CV_RGB2GRAY); 

    cvShowImage("Example2", frame); 
    char c = cvWaitKey(33); 
    if(c == 27) break; 
} 
    cvReleaseCapture(&capture); 
    cvDestroyWindow("Example2"); 
    return 0; 
} 
+0

Ошибка, которую вы получаете, не является ошибкой компоновщика. Это ошибка компилятора. – ypnos

+1

Попробуйте использовать ** Mat ** вместо ** IplImage **. Также используйте эквивалентные функции ** C++ ** (т. Е. _cvtColor_ вместо _cvCvtColor_). – asif

ответ

4

вы используете заголовки для C++ API, но код от устаревшей с-апи (пожалуйста, не !!).

cv::VideoCapture cap(0); 
while(cap.IsOpened()) { 
    cv::Mat f,g; 
    if (! cap.read(f)) break; 
    cv::cvtColor(f, g, CV_RGB2GRAY); 
    cv::imshow("lalala",g); 
    if (waitKey(10) == 27) break; 
} 
return 0; 
Смежные вопросы