点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

OpenCV 中最常用的一个API函数 imshow 各种编程与应用技巧,是否有你以前一直想的,但是从来没有成功过的操作!

01 最简单的显示方式

很多人学习OpenCV,学会前面两个函数就是

Imread – 读图像
Imshow – 显示图像

代码看起来是这样

Mat src = imread("D:/images/test.png");
imshow("input", src);

觉得好简单,真的好简单,但是他们遇到大图的时候,就会发现OpenCV无法完整显示!想把多张图像,显示在一个窗口里面,无法做到!显示浮点数图像全白!这些问题其实是你不了解如何正确使用imshow导致,下面就分享一下本人的做法,也许你会有更好的,欢迎留言拍砖!

02 浮点数图像显示的正确姿势

上面的图像,左侧是输入图像,中间与右侧都是浮点数图像的显示结果。中间图像对应的代码如下:

Mat m1;
src.convertTo(m1, CV_32F);
imshow("m1", m1);

显示的结果是全白色,没有任何可见的信息,难道是程序错拉,程序没有错误,Mat类型转换从读入图像的CV_8UC3转为CV_32FC3也没有错误。修改一下代码

Mat m2;
src.convertTo(m2, CV_32F, 0.00392);
imshow("m2", m2);

只是在类型转换的时候多加了一个参数,这个参数是什么 1/255 = 0.00392

意思是把像素值从0~255 转换为0~1之间的浮点数,然后再显示,显示结果对应上图最右侧。

解释:原来imshow显示浮点数的时候,只支持0~1之间的浮点数显示,超过1就认为是白色,所以在没有对值域做rescale的时候,中间的浮点数Mat显示只能是白色。

03 如何在一个Mat对象中显示多张图

这个是很多人问我过的问题,其实很简单,创建一个空白的Mat,把两张图的内容放进去,然后显示新创建的Mat对象就可以把两张图显示在一个窗口里面。先看效果

代码实现如下:

Mat src1 = imread("D:/images/lena.png");
Mat src2 = imread("D:/images/t3.jpg");
imshow("src1", src1);
imshow("src2", src2);// 构建新图像的大小
int width = src1.cols + src2.cols;
int height = max(src1.rows, src2.rows);
Mat two = Mat::zeros(Size(width, height), src1.type());
// 构建ROI
Rect r1(0, 0, src1.cols, src1.rows);
Rect r2(0, 0, src2.cols, src2.rows);
r2.x = src1.cols;
// 内容copy
src1.copyTo(two(r1));
src2.copyTo(two(r2));imshow("two images demo", two);
waitKey(0);

上述代码,基本上已经很通用,直接读入任意两张图像都可以,唯一需要注意的是合并之后图像太大无法显示怎么办,没关系,我们这就来搞定这个问题。

04 图像太大,无法完整显示怎么办

这个问题,其实不能怪imshow,主要原因出在opencv的默认窗口创建上面,在OpenCV中你可以直接调用imshow函数去显示图像,默认会创建一个同名的窗口,这个窗口的默认打开模式是WINDOW_AUTOSIZE, 这种情况下你是无法调整窗口大小的,很多人其实是掉到这个坑里面去的,解决办法就是代码显式创建一个可以调整大小的窗口,一行代码搞定:

namedWindow("input", WINDOW_FREERATIO)

然后调用

imshow("input", yourMat)

显示时候,注意保持窗口名称一致即可,再大的图像显示都没有问题,前提是内存真的够大!

千万不要尝试的Mat类型图像显示

Imshow其实只支持 CV_8U与CV_32F 类型的数据显示,其它Mat类型数据最好先转换为这两种类型之一再显示,不然你可能会得到各种错误,各种掉坑。建议不要尝试跟API对着干,倒霉的只会是你自己。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

OpenCV中图像显示你不知道的编程技巧相关推荐

  1. 【笔记】效率之门——Python中的函数式编程技巧

    文章目录 Python函数式编程 1. 数据 2. 推导式 3. 函数式编程 3.1. Lambda函数 3.2. python内置函数 3.3. 高阶函数 4. 函数式编程的应用 Python函数式 ...

  2. opencv中的美图技巧(祛斑,词云,风格迁移,抠图,插图,修改背景,图片二维码)等着你的女朋友夸你吧

    个人ps 没掌握得怎么好,尝试用程序来完成ps的功能吧. 有斑点怎么办:祛斑. 只有一张城市白天图,像生成黑夜图怎么办,用风格迁移把. 人物抠图就不说啦吧. 没钱带女友旅游世界怎么办,我教你修改你背景 ...

  3. OpenCV中图像显示窗口函数namedWindow()详解

    函数namedWindow()用于创建显示图像的窗口. 我们在用窗口显示图像时并不一定要调用这个函数,比如图像显示函数imshow会自动创建图像显示窗口. 但有时候我们需要事先对显示图像的窗口对一些设 ...

  4. Visual C++ 中的ODBC编程

    Visual C++ 中的ODBC编程 ODBC(Open Database Connectivity,开放式数据库连接),是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的标准应用程序 ...

  5. 华为上机考试注意事项及编程技巧

    华为上机考试注意事项及编程技巧 这是一篇关于华为招聘软件类职位上机考试的博客,主要介绍一下华为机考的流程.注意事项以及一些机试题中常用的编程技巧,写得有点长,但都是尽心尽力敲的,如果真的要参加华为招聘 ...

  6. c语言编程技巧分析,C语言难点及编程技巧分析

    摘要:近些年信息技术发展迅速,社会需要大量专业的计算机人才,C语言是学习计算机知识的专业理论课程,能够为以后的学习打下专业基础.但目前C语言学习受到各方面因素的影响,学习效果不是很理想,很多时候即使努 ...

  7. Excel表格中一些你不知道的鼠标双击实用小技巧

    Excel表格中一些你不知道的鼠标双击实用小技巧 目录 Excel表格中一些你不知道的鼠标双击实用小技巧 1.鼠标双击自动填充整列公式, 鼠标放在单元格右下角,鼠标指针变成十字时双击鼠标右键,整列汇总 ...

  8. 你不知道的18个Python高效编程技巧

    来源 | Python编程时光 初识Python语言,觉得python满足了我上学时候对编程语言的所有要求.python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行 ...

  9. 编程软件python中的if用法-适合Python初学者的一些编程技巧

    这篇文章主要介绍了给Python初学者的一些编程技巧,皆是基于基础的一些编程习惯建议,需要的朋友可以参考下 交换变量 x = 6 y = 5 x, y = y, x print x >>& ...

最新文章

  1. 【c语言训练】大,小写问题,【C语言训练】大、小写问题 (C语言代码)
  2. CTFshow php特性 web131
  3. mysql创立不了数据库_以下不属于MySQL安装时自动创建的数据库是( ) (5.0分)_学小易找答案...
  4. 成功解决AttributeError: module 'torch.utils' has no attribute 'data'
  5. 交换数组中的两个元素
  6. 如何在 C# 中用 SharpZipLib 进行 ZIP 压缩与解压(转)
  7. 301. Remove Invalid Parentheses
  8. 武汉大学linux课程,武汉大学超算中心
  9. 视觉SLAM笔记(17) 李代数求导与扰动模型
  10. Luogu P2733 家的范围 Home on the Range
  11. 大数据之-Hadoop3.x_MapReduce_WordCount编写_Driver---大数据之hadoop3.x工作笔记0091
  12. 记忆化搜索=搜索的形式+动态规划的思想(来自百度百科)
  13. JDK1.5新特性介绍
  14. CentOS 7部署 Ceph分布式存储架构
  15. iOS 自定义字体设置
  16. c语言 数组指针函数,C语言:数组 指针 函数
  17. 9.计蒜客ACM题库.A1602 结果填空:开关灯
  18. android webview浏览器下载文件,Android 浏览器 —— 使用 WebView 实现文件下载
  19. 互联网日报 | 张朝阳宣布2020年搜狐已盈利;永辉超市达成千店目标;腾讯云原生注册用户规模超100万...
  20. OCV (on-chip-variation)

热门文章

  1. Python实现五子棋人机对战 | CSDN博文精选
  2. AI专利之争:小米超华为,国家电网才是大Boss?
  3. 机器学习大神迈克尔 · 乔丹:我讨厌将机器学习称为AI
  4. 美团大脑:知识图谱的建模方法及其应用 | 公开课笔记
  5. Mybatis-plus常用API全套教程,看完没有不懂的
  6. 一个基于 Spring Boot 的项目骨架
  7. 用漫画了解 Linux 内核到底长啥样!
  8. HTTP客户端连接,选择HttpClient还是OkHttp?
  9. 图灵奖得主LeCun:不需要监督的AI才是未来!
  10. Datawhale团队第六期录取名单!