2015-07-01 3 views
1

Недавно я установил opencv на Ubuntu 12.04.5 из хранилища, используя эту команду.Ubuntu Незаконная инструкция opencv

sudo apt-get install libopencv-dev python-opencv 

Когда я пытаюсь запустить следующий код, чтобы подтвердить, что он работает должным образом я получаю недопустимую инструкцию (она составлена ​​отлично).

#include "opencv2/core/core.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include<iostream> 

using namespace std; 

int main(){ 
    cv::Mat img; 
    img = cv::imread("RO.ppm"); 
    cout << img.size() << endl; 
    return 0; 
} 

Я скомпилировал эту команду (из-за неопределенных опорных ошибок).

g++ -o test test.cpp $(pkg-config opencv --cflags --libs) 

Update: закомментировав COUT линии не меняет результата, и я проверил, что тройная RO.ppm существует в этой директории (даже если он не imread не выдаст ошибку с незаконным или не нашел ввода в моем опыте). Я предполагаю, что мой вопрос в два раза является причиной неправильных ошибок в инструкции и как это исправить?

ответ

1

Вы не можете cout cv :: Размер непосредственно без перегрузки '< <' оператор для cv :: Размер. Вместо этого вы можете получить строки и столбцы из сорте :: Размер и умножать их, чтобы получить общий размер изображения:

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

using namespace std; 

int main(){ 
    cv::Mat img; 
    img = cv::imread("RO.ppm"); 
    cv::Size img_size = img.size(); 

    int cols = img_size.width; 
    int rows = img_size.height; 
    cout << "image size: " << rows*cols << endl; 


    return 0; 
} 

Посмотреть этот похожий post для использования сорте :: Размер.

+0

Комментировать строку cout по-прежнему приводит к нелегальной инструкции, также основанной на моем опыте в C++, не получил ли я более неопределенное сообщение об ошибке типа ошибки и где это произошло? –

+0

Он компилируется безопасно на моем ПК при комментировании строки cout. Также ваш код дает ошибку компиляции, когда я пытался: test.cpp: 12: 22: error: нет соответствия для «operator << 'in' std :: cout << cv :: Mat :: MSize :: operator()() const() ' –

+0

Если вы получаете ошибку во время выполнения, это может быть связано с форматом ввода «ppm». Вы пробовали его с более распространенными форматами, такими как jpeg или png? –

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