Opencv中的imshow函数详解
opencv
OpenCV: 开源计算机视觉库
项目地址:https://gitcode.com/gh_mirrors/opencv31/opencv

·
-
前言
使用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即可:
opencv
OpenCV: 开源计算机视觉库
项目地址:https://gitcode.com/gh_mirrors/opencv31/opencv
案例一代码:
//
//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;
}
推荐内容
阅读全文
AI总结




OpenCV: 开源计算机视觉库
最近提交(Master分支:7 个月前 )
c8e88d89
Specify DLS and UPnP mappings to EPnP in all places for solvePnP* tests #27185
### Pull Request Readiness Checklist
See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
14 小时前
8b4b382f
build: fix OpenBLAS detection on Linux 2 天前
更多推荐
相关推荐
查看更多
opencv

OpenCV: 开源计算机视觉库
opencv

opencv

R bindings for OpenCV
热门开源项目
活动日历
查看更多
直播时间 2025-03-13 18:32:35

全栈自研企业级AI平台:Java核心技术×私有化部署实战
直播时间 2025-03-11 18:35:18

从0到1:Go IoT 开发平台的架构演进与生态蓝图
直播时间 2025-03-05 14:35:37

国产工作流引擎 终结「996」开发困局!
直播时间 2025-02-25 14:38:13

免费开源宝藏 ShopXO,电商系统搭建秘籍大公开!
直播时间 2025-02-18 14:31:04

从数据孤岛到数据智能 - 企业级数据管理利器深度解析
所有评论(0)