OpenCV:我在哪里可以找到CV_WINDOW_AUTOSIZE常量?

6

我尝试根据OpenCV文档构建示例程序,但是遇到了一个问题:

错误:在此作用域中未声明“CV_WINDOW_AUTOSIZE”

程序源代码:

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main( int argc, char** argv )
{
Mat image;
image = imread( argv[1], 1 );

 if( argc != 2 || !image.data )
{
  printf( "No image data \n" );
  return -1;
}

 namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
 imshow( "Display Image", image );

 waitKey(0);

 return 0;  
}

我认为CV_WINDOW_AUTOSIZE常量被包含在某个头文件中,但是我找不到必要的头文件。

7个回答

13

CV_WINDOW_AUTOSIZE实际上确实可以在highgui.h中找到,但是正如评论中@berak指出的那样,那是已过时的C API的一部分。因此你应该采用以下两种做法之一:

  • 使用C++ API中的WINDOW_AUTOSIZE替换,你不需要改变其他任何内容就可以做到这一点,甚至无需包含任何未被示例程序包含的头文件。
  • 使用namedWindow("Display Image")代替,因为namedWindow默认使用WINDOW_AUTOSIZE,所以你甚至不需要将其作为参数包含进来。

测试适用于OpenCV 3.0.0


适用于OpenCV 3.0。非常感谢。 - Bondolin
是的,在这种开源事情中版本很重要。每当一个最近流行的库得到更新时,所有的教程和疑难解答都会过时,直到经过数小时的无果调查后才会有人意识到。 - leinaD_natipaC

5
看起来在OpenCV 3.1中,你需要使用 cv::WindowFlags::WINDOW_AUTOSIZE ,它位于<opencv2/highgui.hpp> 中。

4

对于OpenCV 4,它被定义在<opencv2/highgui/highgui_c.h>中。


3
自从所有的窗口相关内容都在highgui模块中,你需要:
#include <opencv2/highgui/highgui.hpp>

另外,您稍后需要与opencv_highgui库进行链接(link)


1
这对我没有用,但是 #include <opencv/highgui.h> 可以。为什么会这样? - leinaD_natipaC
@leinaD_natipaC - 你正在使用过时的c-api(不要这样做!),上面的答案是针对2.4.9版本的。 - berak
那我应该使用什么?包括<opencv2/highgui/highgui.hpp>并没有起到任何作用,尽管CMake表示正在将可执行文件链接到opencv_highgui(message(“$ {OpenCV_LIBS}”) - > [ ... ] ; opencv_highgui; [...]),其他所有内容都正常工作,所以我不知道我做错了什么。 - leinaD_natipaC
没关系,我刚刚发现我一直在错误地阅读文档。不过你关于使用C-API的建议是正确的。 - leinaD_natipaC

2

我遇到了同样的问题,使用

WINDOW_AUTOSIZE代替

CV_WINDOW_AUTOSIZE


1

在4版本中进行了更改。 如果您已经使用命名空间cv定义,可以直接使用WIDOW_AUTOSIZE。 此外,请不要忘记添加opencv的正确依赖项。


-2

你可以在 highgui.h 中找到它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接