目录

  • 图像窗口函数namedWindow
  • 图像显示函数imshow

图像窗口函数namedWindow

在我们之前的程序中并没有见到窗口函数,因为我们在显示图像时如果没有主动定义图像窗口,程序会自动生成一个窗口用于显示图像,然而有时我们需要在显示图像之前对图像窗口进行操作,例如添加滑动条,此时就需要提前创建图像窗口。创建窗口函数的原型。

void cv::namedWindow(const String & winname,int  flags = WINDOW_AUTOSIZE)
  • winname:窗口名称,用作窗口的标识符
  • flags:窗口属性设置标志

该函数会创建一个窗口变量,用于显示图像和滑动条,通过窗口的名称引用该窗口,如果在创建窗口时已经存在具有相同名称的窗口,则该函数不会执行任何操作。创建一个窗口需要占用部分内存资源,因此通过该函数创建窗口后,在不需要窗口时需要关闭窗口来释放内存资源。OpenCV提供了两个关闭窗口资源的函数,分别是cv::destroyWindow()函数和cv :: destroyAllWindows(),通过名称我们可以知道前一个函数是用于关闭一个指定名称的窗口,即在括号内输入窗口名称的字符串即可将对应窗口关闭,后一个函数是关闭程序中所有的窗口,一般用于程序的最后。不过事实上,在一个简单的程序里,我们并不需要调用这些函数,因为程序退出时会自动关闭应用程序的所有资源和窗口。虽然不主动释放窗口也会在程序结束时释放窗口资源,但是OpenCV 4.0版本在结束时会报出没有释放窗口的错误,而OpenCV 4.1版本则不会报错。

该函数的第一个参数是声明窗口的名称,用于窗口的唯一识别,第二个参数是声明窗口的属性,主要用于设置窗口的大小是否可调、显示的图像是否填充满窗口等,具体可选择的参数及含义在表2-4中给出,默认情况下,函数加载的标志参数为“WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED”。

图像显示函数imshow

我们在前面已经见过了图像显示函数imshow()的调用方式,这里我们给出函数的原型。

void cv::imshow(const String & winname,InputArray mat)
  • winname:要显示图像的窗口的名字,用字符串形式赋值
  • mat:要显示的图像矩阵

该函数会在指定的窗口中显示图像,如果在此函数之前没有创建同名的图像窗口,就会以WINDOW_AUTOSIZE标志创建一个窗口,显示图像的原始大小,如果创建了图像窗口,则会缩放图像以适应窗口属性。该函数会根据图像的深度将其缩放,具体缩放规则为:

  • 如果图像是8位无符号类型,则按照原样显示
  • 如果图像是16位无符号类型或者32位整数类型,则会将像素除以256,将范围由[0,255*256]映射到[0,255]
  • 如果图像时32位或64位浮点类型,则将像素乘以255,即将范围由[0,1]映射到[0,255]

函数中第一个参数为图像显示窗口的名称,第二个参数是需要显示的图像Mat类矩阵。这里需要特殊说明的是,我们看到第二个参数并不是常见的Mat类,而是InputArray,这个是OpenCV定义的一个类型声明引用,用作输入参数的标识,我们在遇到它时可以认为是需要输入一个Mat类数据。同样,OpenCV对输出也定义了OutputArray类型,我们同样可以认为是输出一个Mat类数据。
注意 此函数运行后会继续执行后面程序,如果后面程序执行完直接退出的话,那么显示的图像有可能闪一下就消失了,因此在需要显示图像的程序中,往往会在imshow()函数后跟有cv::waitKey()函数,用于将程序暂停一段时间。waitKey()函数是以毫秒计的等待时长,如果参数缺省或者为“0”表示等待用户按键结束该函数。

C++版本OpenCv教程(六)namedWindow函数imshow函数的使用相关推荐

  1. C++版本OpenCv教程

    C++版本OpenCv教程(一)Mat-基本的图像容器 目标 我们有多种方法从现实世界获取数字图像:数码相机.扫描仪.计算机断层扫描和磁共振成像等等.在以上任何情况下,我们(人类)看到的都是图像.然而 ...

  2. C++版本OpenCv教程(四十二)霍夫变换原理及直线检测

    霍夫变换(Hough Transform)是图像处理中检测是否存在直线的重要算法,该算法是由Paul Hough在1962年首次提出,最开始只能检测图像中的直线,但是霍夫变换经过不断的扩展和完善已经可 ...

  3. C++版本OpenCv教程(十一)多通道分离与合并

    在图像颜色模型中不同的分量存放在不同的通道中,如果我们只需要颜色模型的某一个分量,例如只需要处理RGB图像中的红色通道,可以将红色通道从三通道的数据中分离出来再进行处理,这种方式可以减少数据所占据的内 ...

  4. C++版本OpenCv教程(四十三)直线拟合

    前面介绍的函数都是寻找图像或者点集中是否存在直线,而有时我们明确已知获取到的数据在一条直线上,此时需要将所有数据拟合出一条直线,但是由于噪声的存在,这条直线可能不会通过大多数的数据,因此需要保证所有的 ...

  5. C++版本OpenCv教程(二十七)图像中添加高斯噪声

    OpenCV 4中同样没有专门为图像添加高斯噪声的函数,对照在图像中添加椒盐噪声的过程,我们可以根据需求利用能够产生随机数的函数来完成在图像中添加高斯噪声的任务.在OpenCV 4中提供了fill() ...

  6. C++版本OpenCv教程(二十四)直方图匹配

    直方图均衡化函数可以自动的改变图像直方图的分布形式,这种方式极大的简化了直方图均衡化过程中需要的操作步骤,但是该函数不能指定均衡化后的直方图分布形式.在某些特定的条件下需要将直方图映射成指定的分布形式 ...

  7. OpenCV第六篇:阈值函数

    阈值的作用是根据设定的值处理图像的灰度值,比如灰度大于某个数值像素点保留.通过阈值以及有关算法可以实现从图像中抓取特定的图形,比如去除背景等.实例图片:  1.普通阈值函数:threshold(像素矩 ...

  8. python imshow函数_opencv学习之显示图像-imshow函数

    序 上一篇opencv学习之读取图像-imread函数介绍完opencv读取图片函数imread,这次来介绍与它对应的图像显示函数imshow. imshow函数 imshow函数功能 imshow的 ...

  9. 【MATLAB Image Processing Toolbox 入门教程六】“导入、导出和转换”之“图像类型转换Ⅰ——在不同图像类型之间转换”

    [MATLAB Image Processing Toolbox 入门教程六] 1 gray2ind函数 2 ind2gray函数 3 mat2gray函数 4 rgb2gray函数 5 rgb2in ...

最新文章

  1. python装饰器学习
  2. 转:微软未公开的几个过程介绍及用法
  3. 对多个button触发enter操作,执行不同的操作
  4. 中国联通SDN/NFV的思考与实践
  5. 有关日志打印的几点经验
  6. 产品经理必懂的技术那点事儿 pdf_培养一个合格的产品经理需要多少钱?
  7. CUDA10.1配置VS2017
  8. Azure Cosmos DB(Azure 宇宙数据库)--地球已无法阻止微软玩数据库了
  9. Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误)
  10. Mysql 如何做双机热备和负载均衡 (方法一)
  11. KMP算法 C#实现 字符串查找简单实现
  12. 开源ext2read代码走读之--“\\\\.\\PhysicalDrive0”意义?
  13. Premiere Pro之时间轴面板(二)
  14. 《计算机寓言 - 信息时代的启示》【转载】
  15. linux添加定时任务报错 error renaming /var/spool/cron/#tmp.xxxxxxxx to /var/spool/
  16. 基于javaweb+springboot的医院管理系统(java+Springboot+ssm+mysql+maven)
  17. 15个iOS的视频播放控件
  18. FZU2109 数位dp 含前导零
  19. android:layout_alignParentLeft=true一下是什么意思
  20. 解决kubernetes宿主机top cpu wa io过高引起的cpu资源耗尽问题

热门文章

  1. 优思学院|六西格玛管理6个最常用的工具
  2. 如何制作闪动的gif?一键教你gif闪图在线制作
  3. 如何使用身份证实名认证API接口?
  4. 浅析嵌入式系统之uboot详解(1)—板子上电后uboot做了什么
  5. 瓶颈在谁?论CPU和显卡的合理搭配
  6. iso20000和iso9001的区别
  7. 如何杀掉“熊猫烧香”
  8. 2022年危险化学品经营单位主要负责人操作证考试题及模拟考试
  9. 顺序栈实现将十进制整数转换为r(2、8、16)进制数
  10. 游戏开发-丛林战争制作2