LINUX.ORG.RU

[g++ 4.4 vs 4.5][opencv] Пара вопросов.


0

1

Есть простая программа:

drull@ubuntu:tmp$ cat c.cpp 
#include <opencv/highgui.h>
int main()
{
CvCapture *capture;
capture=cvCreateCameraCapture(0);
char c=0;
cvNamedWindow("win",CV_WINDOW_AUTOSIZE);
IplImage *img;
while(c!='c')
        {
        img=cvQueryFrame(capture);
        cvShowImage("win",img);
        c=cvWaitKey(100);
        }
}
Вопросы:

1. Компиляция. До обновления у меня был g++ 4.4 и все было хорошо. Я собирал этот исходник вот так: g++ -lhighgui c.cpp, и все работало. Когда обновился, у меня g++ стал версии 4.5, и при попытке собрать этот исходник я получаю следующее, хотя я указал -lhighgui:

drull@ubuntu:tmp$ ls -l `which g++`
lrwxrwxrwx 1 root root 7 2011-03-02 00:38 /usr/bin/g++ -> g++-4.5
drull@ubuntu:tmp$ g++ -lhighgui c.cpp 
/tmp/ccAGBjqt.o: In function `main':
c.cpp:(.text+0x11): undefined reference to `cvCreateCameraCapture'
c.cpp:(.text+0x2e): undefined reference to `cvNamedWindow'
c.cpp:(.text+0x3c): undefined reference to `cvQueryFrame'
c.cpp:(.text+0x54): undefined reference to `cvShowImage'
c.cpp:(.text+0x60): undefined reference to `cvWaitKey'
collect2: ld returned 1 exit status
При попытке использовать именно g++-4.4 по прежнему все ок:
drull@ubuntu:tmp$ g++-4.4 -lhighgui c.cpp 
drull@ubuntu:tmp$
В чем проблема?

2. cvCreateCameraCapture блокирует камеру и не дает другим приложениям (тому же скайпу) ее использовать. Я хочу чтобы считывание с камеры проходило в неблокирующем ее режиме. Это возможно как-то реализовать?

★☆☆☆

opencv это ведь c++ либа? у gcc 4.5 мог ABI поменяться

Reset ★★★★★ ()

Неплохо бы, для начала, указать версию opencv.

Зачем вы пишете на с++ используя сишный интерфейс ?

Было бы приятней написать с использованием c++ интерфейса. Это для opencv2.2:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main()
{
        cv::VideoCapture cap(0);
        char c = 0;
        cv::Mat frame;
        while (c != 'c')
        {
                cap >> frame;
                cv::imshow("win", frame);
                c = cvWaitKey(10);
        }
        return 0;
}

Компилировать так:

g++ main.cpp -O3 -lopencv_core -lopencv_highgui -lopencv_imgproc -o camera

AoD314 ()
Ответ на: комментарий от drull

не познать тебе дзен на бинарных репах сидя...
не флуда ради - истины для

megabaks ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.