2014-09-18 3 views
-1

Я новичок в OpenCV, и я начинаю сделать простой код для чтения и отображение изображения в графическом интерфейсе, я работаю в квартах IDE, первого я wirte этого блока кодаНевозможно прочитать изображение в OpenCV

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


int main() 
{ 
    cv::Mat image=cv::imread("image.jpg"); 
    cv::namedWindow("My Image"); 
    cv::imshow("My Image",image); 
    cv::waitKey(0); 
    cv::destroyAllWindows(); 
    return 1; 
} 

Но он отображает белое окно и ошибки в консоли, а затем отображать другое окно «не отвечает» сообщение, а затем перестает работать, Это снимок экран http://pbrd.co/1u2A0ow Тогда я написал другой код действия, чтобы проверить Wheater или нет изображения было прочитано

int main() 
{ 

Mat image; 
cout<<"Size is"<<image.size().height<<","<<image.size().width<<endl; 

image=imread("image.jpg"); 

//Checking first if the image have been read 
if(!image.data) 
{ 
    cout<<"\n No image has created \n"<<endl; 
} 

return 1; 

}

Он выводит на экран сообщение, что означает, что изображение не читается, так что вопрос Как я могу успешно читать и загрузить изображение примечание: изображение в той же папке main.cpp файла http://pbrd.co/1u2Bmj1

+0

Проверить этот файл существует: 'QFile файл ("image.jpg"); if (file.exists()) cout << "\ n существует \ n" << endl; еще cout << "\ n не существует \ n" << endl; 'Что у вас получилось? – Chernobyl

+0

Во втором коде вы вызываете image.size(). Height перед тем, как открыть изображение. Это происходит в следующей строке. Таким образом, вы не можете получить правильную высоту и ширину изображения. – retinotop

+0

Я скопировал ту же строку, которая отображает размер после открытия изображения, и он отображает тот же размер 0,0, на самом деле я пробовал это до публикации здесь – Barq

ответ

1

Как вы сказали, следующий код показал вам, что файл не существует:

QFile file("image.jpg"); 
    if(file.exists()) 
     cout<<"\n exist \n"<<endl; 
    else 
     cout<<"\n not exist \n"<<endl; 

Решение:

Прежде всего, попробуйте установить полный путь к изображению. По некоторым причинам Qt ищет ваш файл в неправильном месте, поэтому задайте полный путь.

Например:

cv::Mat image=cv::imread("G:\\2\\qt.jpg"); 
QFile file("G:\\2\\qt.jpg"); 
if(file.exists()) 
    cout<<"\n exist \n"<<endl; 
else 
    cout<<"\n not exist \n"<<endl; 

Или UNIX стиль:

cv::Mat image=cv::imread("G:/2/qt.jpg"); 
QFile file("G:/2/qt.jpg"); 
if(file.exists()) 
    qDebug()<<"\n exist \n"<<endl; 
else 
    qDebug()<<"\n not exist \n"<<endl; 
+0

Он работает, действительно спасибо Чернобы, он также отображается на gui – Barq

+0

Могу ли я задать еще один вопрос? Что делать, если я хочу запустить этот код на другом компьютере? Что, если, например, я отправляю вам папку с программой, это не сработает, потому что папка программы на диске c: и папка с изображением на диске D: \, когда я попытался поместить изображение в ту же папку, что это не сработало, как я могу сделать программу для отображения изображения на любой платформе? – Barq

+0

@Barq, чтобы сделать это, вы должны использовать свой первый путь image.jpg НО поместите это изображение рядом с файлом exe и отправьте его пользователю. И он будет работать, потому что приложение найдет его, это не сработало для вас, потому что вы запускаете приложение с QtCreator и создаете qt этот образ в другом месте (может быть рядом с exe или нет) – Chernobyl

0

кажется, что программа не знает, где находится изображение. Попробуйте включить main.cpp в качестве одной из библиотек, которые программа будет использовать. Таким образом, программа сможет найти и открыть изображение.

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