Opencv中的imshow函数详解
前言
使用opencv对图像进行处理之后,通常调用imshow函数来显示处理结果。但是,我们经常会发现显示结果和我们预期的结果有些差别。这是由于opencv经常会涉及到对多种图像数据类型的处理,如果我们对图像数据类型之间的转换以及imshow函数理解不够透彻,那么显示结果则不会尽如人意。
imshow函数详解
对于imshow函数,opencv的官方注释指出:根据图像的深度,imshow函数会自动对其显示灰度值进行缩放,规则如下:
- 如果图像数据类型是8U(8位无符号),则直接显示。
- 如果图像数据类型是16U(16位无符号)或32S(32位有符号整数),则imshow函数内部会自动将每个像素值除以256并显示,即将原图像素值的范围由[0~255*256]映射到[0~255]
- 如果图像数据类型是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函数详解相关推荐
- opencv imshow函数详解
前言 使用opencv对图像进行处理之后,通常调用imshow函数来显示处理结果.但是,我们经常会发现显示结果和我们预期的结果有些差别.这是由于opencv经常会涉及到对多种图像数据类型的处理,如果我 ...
- python getattr_Python中的getattr()函数详解:
标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...
- timm 视觉库中的 create_model 函数详解
timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...
- python input函数详解_对Python3中的input函数详解
下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...
- Python中的bbox_overlaps()函数详解
Python中的bbox_overlaps()函数详解 想要编写自己的目标检测算法,就需要掌握bounding box(边界框)之间的关系.在这之中,bbox_overlaps()函数是一个非常实用的 ...
- java的匿名函数_JAVA语言中的匿名函数详解
本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...
- 内核中的kmalloc函数详解
一.kmalloc函数详解 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参数是 ...
- 前端如何设置背景颜色的透明度 css中的 rgba() 函数详解 :background-color: rgba(255,192,203,0.3)
目录 前言 rgba() 函数 详解 再分享一个小技巧哈哈哈 前言 今天在开发移动端的时候感觉没背景颜色有点丑,再加上自己做的是蛋糕app,觉得暖色应该会很好看,于是就用了这行代码 backgroun ...
- linux内核中的hook函数详解,linux内核中的hook函数详解
在编写linux内核中的网络模块时,用到了钩子函数也就是hook函数.现在来看看linux是如何实现hook函数的. 先介绍一个结构体: struct nf_hook_ops,这个结构体是实现钩子函数 ...
最新文章
- Docker系列 五.Docker容器数据卷
- 微服务2017年度报告出炉:4大客户画像,15%传统企业已领跑
- 如何把单精度二进制数转换成十进制数?
- java 上下文加载器_如何将JDK6 ToolProvider和JavaCompiler与上下文类加载器一起使用?...
- Web- HTML网页颜色大全
- php mysql购物车实现原理_PHP实现购物车的思路和源码分析
- android抽屉风格,Android开发实战之拥有Material Design风格的抽屉式布局
- CentOS 8,凛冬将至
- Unity的包体压缩以及音效优化
- #include stdafx.h
- 浏览器安装Axure插件与配置
- 中国区块链专利申请数破万:阿里巴巴、联通、复杂美稳居前三甲
- 如何获取主机名和当前登录用户名
- win32 python查找文字指定格式 win32com 定位word开始结束 相当于发送快捷键
- wavplay控件应用之SigmaStudio
- Unity win平台 调整窗口大小强制固定比例
- 使用多张图片做帧动画的性能优化
- python获取登录后的cookie_python爬虫使用cookie登录详解
- 频谱仪测试gsm信号测试软件,浅谈GSM ORFS输出频谱测试
- STM32----FLASH掉电保存动态平衡方案