OpenCV4萌新之路——详解图像显示三兄弟 “imshow”、“namedWindow” 和“waitKey”


上一篇" OpenCV4萌新之路——详解图像读取函数 “imshow”"讲了imread的使用方法,就用到其中两个函数:imshow和waitKey。

void cv::imshow(const String & winname, InputArray mat);
int cv::waitKey(int delay = 0);
void cv::namedWindow(const String & winname,int flags = WINDOW_AUTOSIZE);

一、函数简析

头文件 #include <opencv2/highgui.hpp>

imshow返回类型命名空间函数名参数1参数2
详细voidcvimshowconst String & winnameInputArray mat
详细---窗口标题名输入待显示的图像数组
waitKey返回类型命名空间函数名参数1
详细voidcvwaitKeyint delay = 0
详细---等待时间(ms)
namedWindow返回类型命名空间函数名参数1参数2
详细voidcvnamedWindowconst String & winnameint flags = WINDOW_AUTOSIZE
详细---窗口标题名窗口类型

二、参数详解

1.1 const String & winname

任意起一个名字作为图像显示的窗口名称,显示在左上角,如下图箭头所示位置。
在这里插入图片描述

1.2 InputArray mat

输入图像除了8-bit unsigned,其他的全部会将数字映射到[0,255]。

2.1 int delay = 0

如果输入参数小于等于0,则图像显示窗口会一直存在,直到按下任意键后销毁窗口。
如果输入参数大于0,则等待对应毫秒数后自动销毁窗口。
如果等待过程中你按下任何键,程序销毁窗口,并返回键盘按键对应的keyCode值。
如果等待时间到了,程序自动销毁窗口,并返回-1。

3.1 const String & winname

同1.1

3.2 int flags = WINDOW_AUTOSIZE

枚举名定义解释
0x00000000WINDOW_NORMALthe user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.用户可以无限制的改变窗口的大小
0x00000001WINDOW_AUTOSIZEthe user cannot resize the window, the size is constrainted by the image displayed.窗口固定位图像大小,不可改变
0x00001000WINDOW_OPENGLwindow with opengl support.支持 ogl::Buffer , ogl::Texture2D 和cuda::GpuMat三种类型的图像显示
1WINDOW_FULLSCREENchange the window to fullscreen.全屏显示
0x00000100WINDOW_FREERATIOthe image expends as much as it can (no ratio constraint).无限制缩放
0x00000000WINDOW_KEEPRATIOthe ratio of the image is respected.按图像原始比例缩放
0x00000000WINDOW_GUI_EXPANDEDstatus bar and tool bar
0x00000010WINDOW_GUI_NORMALold fashious way

三、测试代码

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;

#define IMAGE_ABSOLUTE_PATH "F:/Leraning_OpenCV4/Sakai_Izumi.jpg" //绝对路径
#define IMAGE_RELATIVE_PATH "./Sakai_Izumi.jpg" //相对路径(

int main()
{
	//读取图片
	Mat src = imread(IMAGE_ABSOLUTE_PATH, 0);
	//Mat src = imread(IMAGE_RELATIVE_PATH, 1);

	//判读是否成功读取图片
	if (src.empty())
	{
		std::cout << "Load img failed!" << endl;
		return 0;
	}
	else
	{
		std::cout << "Load img success!" << endl;
	}

	//显示图片
	namedWindow("src", WINDOW_AUTOSIZE);
	imshow("src", src);
	int rv = waitKey(0);
	cout << rv << endl;

	return 1;
}

四. 其他测试

1.无限制缩放?

测试后发现,最小只能缩放到114*60,不知道是否和屏幕分辨率相关,有哪位大神知道还望不吝赐教。
在这里插入图片描述

2.支持OpenGL

创建的窗口支持OpenGL

namedWindow("src", WINDOW_OPENGL);
imshow("src", src);
waitKey(0);

测试的时候发现编译的时候没有添加OpenGL,报错如下
OpenCV(4.3.0) Error: No OpenGL support (Library was built without OpenGL support) in cvNamedWindow
在这里插入图片描述
尴尬,只好再去重新编译一次了。

四、参考文献

  1. High-level GUI.
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值