OpenCV 在同一窗口显示多幅图片

好久没更新blog里,看到OpenCV官网做的越来越好,心里也是很高兴的,真有些冲动将来加入到这个组织里做些事。估计2.4.3要在国庆左右跟大家见面,让我们多期待一下吧。

闲话少说,今天不介绍复杂的算法了,来个简单的,大家写文章做图经常用Matlab,在Matlab里经常在一个窗口里打开多幅图片。遗憾的是OpenCV没有集成这样的功能,但这难不倒大家,让我试试用ROI来解决这个问题。

没啥好讲的,上代码好了:

1void imshowMany(const std::string& _winName, const vector<Mat>& _imgs) 2{ 3 int nImg = (int)_imgs.size(); 4  5 Mat dispImg; 6 int size; 7 int x, y; 8 // w - Maximum number of images in a row  9 // h - Maximum number of images in a column  10 int w, h; 11 // scale - How much we have to resize the image 12 float scale; 13 int max; 14 if (nImg <= 0)  15 { 16  printf("Number of arguments too small....\n"); 17  return; 18 } 19 else if (nImg > 12) 20 { 21  printf("Number of arguments too large....\n"); 22  return; 23 } 24  25 else if (nImg == 1) 26 { 27  w = h = 1; 28  size = 300; 29 } 30 else if (nImg == 2) 31 { 32  w = 2; h = 1; 33  size = 300; 34 } 35 else if (nImg == 3 || nImg == 4) 36 { 37  w = 2; h = 2; 38  size = 300; 39 } 40 else if (nImg == 5 || nImg == 6) 41 { 42  w = 3; h = 2; 43  size = 200; 44 } 45 else if (nImg == 7 || nImg == 8) 46 { 47  w = 4; h = 2; 48  size = 200; 49 } 50 else 51 { 52  w = 4; h = 3; 53  size = 150; 54 } 55 dispImg.create(Size(100 + size*w, 60 + size*h), CV_8UC3); 56 for (int i= 0, m=20, n=20; i<nImg; i++, m+=(20+size)) 57 { 58  x = _imgs[i].cols; 59  y = _imgs[i].rows; 60  max = (> y)? x: y; 61  scale = (float) ( (float) max / size ); 62  if (i%w==0 && m!=20) 63  { 64   m = 20; 65   n += 20+size; 66  } 67  Mat imgROI = dispImg(Rect(m, n, (int)(x/scale), (int)(y/scale))); 68  resize(_imgs[i], imgROI, Size((int)(x/scale), (int)(y/scale))); 69 } 70 namedWindow(_winName); 71 imshow(_winName, dispImg); 72}

附上效果图一张:

工程的下载链接为http://download.csdn.net/detail/yang_xian521/4531610

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593

OpenCV检测轮廓极点(Python C++)

    今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。!(https://oscimg.oschina.net/oscnet/ae374a72c5404b00b0e976e499eedf36.png)    第一步:阈值处理分割出地图轮廓!(ht