2014-12-22 2 views
1

Я следую учебнику here для настройки OpenCV с Visual Studio (у меня есть версия Community Community Community Edition и OpenCV 2.4.10).Ошибка чтения изображения OpenCV

Я имею следующую структуру папок:

OpenCVTest 

    -OpenCVTest.sln 
    +x64 
     +Debug 
      - opencv_core2410d.dll 
      - opencv_highgui2410d.dll 
      - OpenCVTest.exe 
      - OpenCVTest.ilk 
      - OpenCVTest.pdb 
      - feck.png 

И мой источник:

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

using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 
    if (argc != 2) 
    { 
     cout << " Usage: display_image ImageToLoadAndDisplay" << endl; 
     return -1; 
    } 

    Mat image; 
    image = imread(argv[1], IMREAD_COLOR); // Read the file 

    if (!image.data) // Check for invalid input 
    { 
     cout << "Could not open or find the image" << std::endl; 
     return -1; 
    } 

    namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display. 
    imshow("Display window", image); // Show our image inside it. 

    waitKey(0); // Wait for a keystroke in the window 
    return 0; 
} 

Когда я запускаю это в VS или в командной строке, я получаю следующее сообщение об ошибке:

C:\Users\mr\Documents\Visual Studio 2013\Projects\OpenCVTest\x64\Debug>OpenCVTest.exe feck.png 
Could not open or find the image 

Кто-нибудь знает, почему это может произойти?

Update

Я попытался дать полный путь:

image = imread("C:\Users\mr\Documents\Visual Studio 2013\Projects\OpenCVTest\feck.png", IMREAD_COLOR); // Read the file 

и размещения изображения на том же уровне, что и .sln файла, до сих пор не повезло.

+0

Вы можете попытаться предоставить абсолютный путь, например '' C:/Users/mr/Documents/Visual Studio 2013/Projects/OpenCVTest/x64/Debug/feck.png "' – Micka

+0

проверить, что 'feck.png' является действительный '.png' image – Drop

+1

lol" feck.png ". – GPPK

ответ

0

В учебнике here, в разделе "Локальный метод", гласит:

Then you need to specify the libraries in which the linker should look into. To do this go to the Linker ‣ Input and under the “Additional Dependencies” entry add the name of all modules which you want to use:

opencv_core231d.lib 
opencv_imgproc231d.lib 
opencv_highgui231d.lib 
opencv_ml231d.lib 
opencv_video231d.lib 
opencv_features2d231d.lib 
opencv_calib3d231d.lib 
opencv_objdetect231d.lib 
opencv_contrib231d.lib 
opencv_legacy231d.lib 
opencv_flann231d.lib 

Я изменил они от opencv_core{version}d.lib до opencv_core{version}.lib (не библиотека отладки), и, похоже, это нормально Теперь. Я могу выполнить код в Visual Studio, и этот код работает.

+0

Очень важно, чтобы Visual Studio использовала отладочные DLL-файлы в релиз-приложении или выпускает dll (если выделение не изолировано и вы не используете stl через границу dll) в приложении отладки, потому что у вас будет более 1 независимой кучи, вы не можете выделить память в 1 кучу и освободить ее за секунду. Это приведет к повреждению кучи и случайным искажениям. То же самое касается использования dll из другой версии Visual Studio. – drescherjm

+0

Я ценю, что для их использования должна быть веская причина, однако я не мог заставить ее работать с ними. Если бы вы могли предложить рабочую альтернативу, я бы определенно использовал их вместо релизов. – TomSelleck

0

Поместите изображение в папку OpenCVTest так:

C:\Users\mr\Documents\Visual Studio 2013\Projects\OpenCVTest\OpenCVTest\feck.png

-OpenCVTest.sln 
-OpenCVTest <- **HERE** 
-ipch 
+x64 
    +Debug 
     - opencv_core2410d.dll 
     - opencv_highgui2410d.dll 
     - OpenCVTest.exe 
     - OpenCVTest.ilk 
     - OpenCVTest.pdb 
     - feck.png 
+0

Эй, этого не было, к сожалению. – TomSelleck

+1

Как установить OpenCV на Visual Studio? Убедитесь, что весь путь к библиотеке OpenCV верен в «Debug | x64» Property Manager, поскольку вы используете 64-битную машину. – Wandiw