OpenCV中图像显示你不知道的编程技巧
点击上方↑↑↑“磐创AI”关注我
精品文章,第一时间送达
转载自:OpenCV学堂,未经许可不得二次转载
写代码我们是认真的!
阅读本文大概需要 4min
OpenCV 中最常用的一个API函数 imshow 各种编程与应用技巧,是否有你以前一直想的,但是从来没有成功过的操作!
最简单的显示方式
很多人学习OpenCV,学会前面两个函数就是
Imread – 读图像Imshow – 显示图像
代码看起来是这样
Mat src = imread("D:/images/test.png");imshow("input", src);
觉得好简单,真的好简单,但是他们遇到大图的时候,就会发现OpenCV无法完整显示!想把多张图像,显示在一个窗口里面,无法做到!显示浮点数图像全白!这些问题其实是你不了解如何正确使用imshow导致,下面就分享一下本人的做法,也许你会有更好的,欢迎留言拍砖!
浮点数图像显示的正确姿势

上面的图像,左侧是输入图像,中间与右侧都是浮点数图像的显示结果。中间图像对应的代码如下:
Mat m1;src.convertTo(m1, CV_32F);imshow("m1", m1);
显示的结果是全白色,没有任何可见的信息,难道是程序错拉,程序没有错误,Mat类型转换从读入图像的CV_8UC3转为CV_32FC3也没有错误。修改一下代码
Mat m2;src.convertTo(m2, CV_32F, 0.00392);imshow("m2", m2);
只是在类型转换的时候多加了一个参数,这个参数是什么 1/255 = 0.00392
意思是把像素值从0~255 转换为0~1之间的浮点数,然后再显示,显示结果对应上图最右侧。
解释:原来imshow显示浮点数的时候,只支持0~1之间的浮点数显示,超过1就认为是白色,所以在没有对值域做rescale的时候,中间的浮点数Mat显示只能是白色。
如何在一个Mat对象中显示多张图
这个是很多人问我过的问题,其实很简单,创建一个空白的Mat,把两张图的内容放进去,然后显示新创建的Mat对象就可以把两张图显示在一个窗口里面。先看效果

代码实现如下:
Mat src1 = imread("D:/images/lena.png");Mat src2 = imread("D:/images/t3.jpg");imshow("src1", src1);imshow("src2", src2);// 构建新图像的大小int width = src1.cols + src2.cols;int height = max(src1.rows, src2.rows);Mat two =
