3

我正在尝试在这里找到的基本教程http://bsd-noobz.com/opencv-guide/40-1-load-and-display-an-image处理加载和显示图像。我在 Visual Studio 2012 中进行操作。

我已将图像文件“lena.png”放在 exe 文件旁边的 Debug 文件夹中。当我尝试从终端执行 exe 文件时,它只会回复“无法加载图像!”。我也在 Release 文件夹中尝试过,结果相同。

这是我的程序代码:

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

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    if(argc > 1){
        cout << argv[1] << endl;
    }

    Mat img = imread("lena.png", CV_LOAD_IMAGE_COLOR);

    if (img.empty())
    {
        cout << "Cannot load image!" << endl;
        return -1;
    }

    namedWindow("image", CV_WINDOW_AUTOSIZE);
    imshow("image", img);
    waitKey(0);

    return 0;
}

我不明白为什么会发生这种情况,图片与 .exe 位于同一目录中,我正在按照示例代码进行操作。请帮助我理解为什么找不到文件!

编辑:哈哈哈哈哈哈我修好了。由于我正在运行调试版本并且它工作正常,因此我将所有额外的依赖项从 *.lib 更改为 *d.lib,我非常生气。如果我阅读有关如何使用 opencv 的教程,它会说存在差异,但是自从它编译后,我认为它会起作用。我现在将尝试发布版本,看看它是否有效(当然要更改依赖项)。

编辑2:是的,它有效。因此,我自己的问题的答案是,您需要将包含文件夹中的正确 .lib 文件链接为调试和发布版本的依赖项。以“d”结尾的用于调试,其他用于发布。现在我发现问题可能并不那么令人惊讶,但它确实存在。

4

1 回答 1

0

也许它与imread. 尝试使用一种或任何有效的图像格式。从这里.jpg引用,

The function imread loads an image from the specified file and returns it. If the image can not be read (because of missing file, improper permissions, unsupported or invalid format), the function returns empty matrix ( Mat::data==NULL ).

于 2013-04-05T07:14:29.377 回答