我正在阅读《学习简历》一书,遇到了第一个示例,遇到了这个问题

使用OPENCV 3.0.0和VS 2013,添加并检查了所有库。

代码如下

 #include "opencv2/highgui/highgui.hpp"

int main( int argc, char** argv)
{
    IplImage* img = cvLoadImage(argv[1]);
    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
    cvShowImage("Example1", img);
    cvWaitKey(0);
    cvReleaseImage(&img);
    cvDestroyWindow("Example1");
}

因此,在编译或构建后,我得到了一个名为Example1的窗口,它是灰色的,该窗口中没有图像。

它是否正确?还是我期望得到什么?

最佳答案

您没有正确加载图片,即argv[1]的路径无效。您可以像这样检查:

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

int main(int argc, char** argv)
{
    IplImage* img = cvLoadImage(argv[1]);
    //IplImage* img = cvLoadImage("path_to_image");

    if (!img)
    {
        std::cout << "Image not loaded";
        return -1;
    }

    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
    cvShowImage("Example1", img);
    cvWaitKey(0);
    cvReleaseImage(&img);
    cvDestroyWindow("Example1");
}

您也可以直接在代码中提供路径,例如:
IplImage* img = cvLoadImage("path_to_image");

您可以参考here来知道为什么您的路径可能是错误的。

您也不应使用旧的C语法,而应使用C++语法。您的示例如下所示:
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;

int main()
{
    Mat3b img = imread("path_to_image");

    if (!img.data)
    {
        std::cout << "Image not loaded";
        return -1;
    }

    imshow("img", img);
    waitKey();
    return 0;
}

您可以参考this answer来了解如何正确设置Visual Studio。

10-05 21:14
查看更多