我正在阅读《学习简历》一书,遇到了第一个示例,遇到了这个问题
使用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。