前言

使用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 函数详解

    官方文档:imshow.namedWindow等 本来想看看imshow的窗口是否可以隐藏菜单栏,看完官方文档感觉是不可以了. imshow imshow的输入参数如下: void cv::imsho ...

  2. Opencv中的imshow函数详解

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

  3. opencv reshape函数详解

    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数. 函数原型: C++: Mat Mat::reshape(int cn, in ...

  4. opencv warpAffine()函数详解 -- 图像旋转与平移

    简述 仿射变换是二维坐标间的线性变换,故而变换后的图像仍然具有原图的一些性质,包括"平直性"以及"平行性",常用于图像翻转(Flip).旋转(Rotations ...

  5. 图像处理笔记(2)---- OpenCV imread函数详解

    imread()读取图片文件,imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种: cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1. ...

  6. OpenCV 图像卷积:cv.filter2D() 函数详解

    API 照例,我们搬一下官网的 API: C++ void cv::filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kern ...

  7. OpenCV 图像缩放:cv.resize() 函数详解

    目录 系列前言 API 函数详解 参数列表 缩放方式其一 缩放方式其二 两种方式的优先级 关于插值方式 扩展 -- 相关函数 系列前言 这个系列是我第一个想要更下去的系列.每篇会全面介绍一个 Open ...

  8. 【OpenCV 4开发详解】分割图像——分水岭法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. 【OpenCV 4开发详解】QR二维码检测

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

最新文章

  1. linux内核网络接收数据流程图【转】
  2. LibSVM学习(三)——LibSVM使用规范
  3. C#中的Switch语句【C#】
  4. FTP服务器架设详细图解
  5. Maven如何将别人的项目导入到自己的eclipse并使用
  6. 【毕业寄语】我们不缺少鼓励但却缺少了批评
  7. LeetCode() Search in Rotated Sorted Array
  8. HP OMEN品牌机配3090显卡,驱动,CUDA,Cudnn安装过程
  9. vue.js入门以及和echarts整合之柱状图和中国地图
  10. 真核有参转录组测序标准分析-3
  11. wkwebview清空html缓存,清除WKWebView cookies的方法
  12. Docker网络之三:自定义容器虚拟IP
  13. 世界七大数学难题——千年大奖问题(转载)
  14. Python中记录程序运行时间
  15. 互联网时代的B2B电商系统到底意味着什么
  16. .osr 文件格式解析(二) - 数据类型
  17. Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)
  18. 安科瑞智能操控无线测温装置在江苏某化工产业园项目的应用
  19. Codeforces 891E Lust
  20. 高校师生科研成果管理平台

热门文章

  1. 很经典的117句惊世良言,值得一读
  2. npm淘宝镜像和查看镜像设置
  3. 100道Python面试练习题【含答案】
  4. IDEA开发工具中Debug模式的基本使用
  5. 数据正规化(data normalization)的原理及实现(numpy)
  6. Hadoop组件?Hadoop由什么组成?
  7. idea Debug调试快捷键
  8. 美图秀秀神奇消除笔 轻松抹掉路人甲
  9. m4a音频格式转换器:让音频轻松换装
  10. 会计电算化是对用电子计算机处理,会计电算化的应用及影响的论文