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 函数详解
官方文档:imshow.namedWindow等 本来想看看imshow的窗口是否可以隐藏菜单栏,看完官方文档感觉是不可以了. imshow imshow的输入参数如下: void cv::imsho ...
- Opencv中的imshow函数详解
前言 使用opencv对图像进行处理之后,通常调用imshow函数来显示处理结果.但是,我们经常会发现显示结果和我们预期的结果有些差别.这是由于opencv经常会涉及到对多种图像数据类型的处理,如果我 ...
- opencv reshape函数详解
在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数. 函数原型: C++: Mat Mat::reshape(int cn, in ...
- opencv warpAffine()函数详解 -- 图像旋转与平移
简述 仿射变换是二维坐标间的线性变换,故而变换后的图像仍然具有原图的一些性质,包括"平直性"以及"平行性",常用于图像翻转(Flip).旋转(Rotations ...
- 图像处理笔记(2)---- OpenCV imread函数详解
imread()读取图片文件,imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种: cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1. ...
- OpenCV 图像卷积:cv.filter2D() 函数详解
API 照例,我们搬一下官网的 API: C++ void cv::filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kern ...
- OpenCV 图像缩放:cv.resize() 函数详解
目录 系列前言 API 函数详解 参数列表 缩放方式其一 缩放方式其二 两种方式的优先级 关于插值方式 扩展 -- 相关函数 系列前言 这个系列是我第一个想要更下去的系列.每篇会全面介绍一个 Open ...
- 【OpenCV 4开发详解】分割图像——分水岭法
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】QR二维码检测
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
最新文章
- linux内核网络接收数据流程图【转】
- LibSVM学习(三)——LibSVM使用规范
- C#中的Switch语句【C#】
- FTP服务器架设详细图解
- Maven如何将别人的项目导入到自己的eclipse并使用
- 【毕业寄语】我们不缺少鼓励但却缺少了批评
- LeetCode() Search in Rotated Sorted Array
- HP OMEN品牌机配3090显卡,驱动,CUDA,Cudnn安装过程
- vue.js入门以及和echarts整合之柱状图和中国地图
- 真核有参转录组测序标准分析-3
- wkwebview清空html缓存,清除WKWebView cookies的方法
- Docker网络之三:自定义容器虚拟IP
- 世界七大数学难题——千年大奖问题(转载)
- Python中记录程序运行时间
- 互联网时代的B2B电商系统到底意味着什么
- .osr 文件格式解析(二) - 数据类型
- Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)
- 安科瑞智能操控无线测温装置在江苏某化工产业园项目的应用
- Codeforces 891E Lust
- 高校师生科研成果管理平台