• 前言

使用opencv对图像进行处理之后,通常调用imshow函数来显示处理结果。但是,我们经常会发现显示结果和我们预期的结果有些差别。这是由于opencv经常会涉及到对多种图像数据类型的处理,如果我们对图像数据类型之间的转换以及imshow函数理解不够透彻,那么显示结果则不会尽如人意。

  • imshow函数详解

对于imshow函数,opencv的官方注释指出:根据图像的深度,imshow函数会自动对其显示灰度值进行缩放,规则如下:

  1. 如果图像数据类型是8U(8位无符号),则直接显示。
  2. 如果图像数据类型是16U(16位无符号)或32S(32位有符号整数),则imshow函数内部会自动将每个像素值除以256并显示,即将原图像素值的范围由[0~255*256]映射到[0~255]
  3. 如果图像数据类型是32F(32位浮点数)或64F(64位浮点数),则imshow函数内部会自动将每个像素值乘以255并显示,即将原图像素值的范围由[0~1]映射到[0~255](注意:原图像素值必须要归一化)
  • 案例说明

基于imshow函数的以上显示原则,我们举例进行验证。

案例一:

首先加载一张原图并显示:

然后将原图转换为16U格式的图像并显示。我们会发现图像一片漆黑,这是因为imshow函数内部自动将每个像素值除以256,因此我们看到的图像像素值都是小于1的(原图灰度值范围是0~255)。

为了能够正常显示图像,我们对16U格式的图像乘以一个系数256即可:

案例一代码:

//
//opencv4.1.0
//#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main() {Mat src1, src2,src3;src1 = imread("1.png", 0);imshow("原图", src1);src1.convertTo(src2, CV_16U);imshow("格式转换图", src2);src2.convertTo(src3, CV_16U, 256);imshow("格式转换系数修正图", src3);waitKey(0);return 0;
}

案例二:

首先加载一张原图并显示:

然后将原图转换为32F格式的图像并显示。我们会发现图像中目标全是白色,这是因为imshow函数内部自动将每个像素值乘以256,因此我们看到的图像像素值都是大于255的(原图灰度值范围是0~255)。

为了能够正常显示图像,我们对32F格式的图像进行归一化即可:

案例二代码:

//
//opencv4.1.0
//#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main() {Mat src1, src2,src3;src1 = imread("1.png", 0);imshow("原图", src1);src1.convertTo(src2, CV_32F);imshow("格式转换图", src2);normalize(src2, src3, 0, 1, NORM_MINMAX);imshow("格式转换系数修正图", src3);waitKey(0);return 0;
}

Opencv中的imshow函数详解相关推荐

  1. opencv imshow函数详解

    前言 使用opencv对图像进行处理之后,通常调用imshow函数来显示处理结果.但是,我们经常会发现显示结果和我们预期的结果有些差别.这是由于opencv经常会涉及到对多种图像数据类型的处理,如果我 ...

  2. python getattr_Python中的getattr()函数详解:

    标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...

  3. timm 视觉库中的 create_model 函数详解

    timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...

  4. python input函数详解_对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...

  5. Python中的bbox_overlaps()函数详解

    Python中的bbox_overlaps()函数详解 想要编写自己的目标检测算法,就需要掌握bounding box(边界框)之间的关系.在这之中,bbox_overlaps()函数是一个非常实用的 ...

  6. java的匿名函数_JAVA语言中的匿名函数详解

    本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...

  7. 内核中的kmalloc函数详解

    一.kmalloc函数详解 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参数是 ...

  8. 前端如何设置背景颜色的透明度 css中的 rgba() 函数详解 :background-color: rgba(255,192,203,0.3)

    目录 前言 rgba() 函数 详解 再分享一个小技巧哈哈哈 前言 今天在开发移动端的时候感觉没背景颜色有点丑,再加上自己做的是蛋糕app,觉得暖色应该会很好看,于是就用了这行代码 backgroun ...

  9. linux内核中的hook函数详解,linux内核中的hook函数详解

    在编写linux内核中的网络模块时,用到了钩子函数也就是hook函数.现在来看看linux是如何实现hook函数的. 先介绍一个结构体: struct nf_hook_ops,这个结构体是实现钩子函数 ...

最新文章

  1. Docker系列 五.Docker容器数据卷
  2. 微服务2017年度报告出炉:4大客户画像,15%传统企业已领跑
  3. 如何把单精度二进制数转换成十进制数?
  4. java 上下文加载器_如何将JDK6 ToolProvider和JavaCompiler与上下文类加载器一起使用?...
  5. Web- HTML网页颜色大全
  6. php mysql购物车实现原理_PHP实现购物车的思路和源码分析
  7. android抽屉风格,Android开发实战之拥有Material Design风格的抽屉式布局
  8. CentOS 8,凛冬将至
  9. Unity的包体压缩以及音效优化
  10. #include stdafx.h
  11. 浏览器安装Axure插件与配置
  12. 中国区块链专利申请数破万:阿里巴巴、联通、复杂美稳居前三甲
  13. 如何获取主机名和当前登录用户名
  14. win32 python查找文字指定格式 win32com 定位word开始结束 相当于发送快捷键
  15. wavplay控件应用之SigmaStudio
  16. Unity win平台 调整窗口大小强制固定比例
  17. 使用多张图片做帧动画的性能优化
  18. python获取登录后的cookie_python爬虫使用cookie登录详解
  19. 频谱仪测试gsm信号测试软件,浅谈GSM ORFS输出频谱测试
  20. STM32----FLASH掉电保存动态平衡方案

热门文章

  1. mysql 正则表达式方法_mysql正则表达式
  2. unity中物体受伤时切换受伤图片
  3. python model如何获取分类错误的数据_使用CNN和Keras进行95%准确度的交通标志识别的Python项目
  4. 面试官:一个能一网打尽的技术问题
  5. 骁龙7gen1处理器怎么样 骁龙7gen1相当于什么处理器
  6. 桥梁模式和访问者模式
  7. Chrome游戏:Cargo Bridge(桥梁工程师)
  8. 2021-01-24-攒车
  9. java10安装步骤
  10. win10 uwp 入门