【OpenCV】imshow()和namedWindow()之间的关系,解决两个窗口问题
imshow()
方法原型: void imshow(const string& winname, InputArray mat);
作用: 在指定的窗口显示图片。
参数:
-
const string& winname
:显示图片的窗口名称。 -
InputArray mat
:需要显示的mat图像。
namedWindow()
方法原型: void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
作用: 创建一个窗口。
参数:
-
const string& winname
:标识创建的窗口名称。 -
int flag
:窗口的标识。(不写此参数则默认为WINDOW_AUTOSIZE)
WINDOW_NORMAL->用户可随意改变窗口的大小。
WINDOW_AUTOSIZE->窗口自动调整大小适应图像大小。
WINDOW_OPENGL->窗口创建支持OpenGL。
关系
如果只用imshow()显示一张图片的话,该窗口显示的图片是不可交互的。(不可放大,做小操作)
但是如果在imshow()之前加上namedWindow()方法来显示一张图片的话,该窗口显示的图片是可交互的。(可以放大缩小之类的操作,不知道录屏的时候鼠标怎么没有显示出来。)
注意:
1、这里使用imshow()和namedWindow()方法时候窗口的标识名称(传递的第一个参数)要一样。
2、namedWindow()方法要写在imshow()方法之前才可以。
常见问题
有些朋友同时使用imshow()和namedWindow()显示图片的时候发现出现了两个窗口。
这是由于配置问题导致的。
1、【视图】->【其他窗口】->【属性管理器】
2、展开Debug|x64
,右键【Microsoft.Cpp.x64.user】,点击属性。
3、【通用属性】->【链接器】->【输入】->【附加的依赖项】
这里添加了两个依赖项,修改一下顺序,.lib文件最后带d的放在前面,或者直接去掉不带d的lib文件路径
这样就解决了显示两个窗口的问题。
如果设置完成后还是不起作用可以重新生成解决方案试一下