OpenCV一个窗口画多个图
来源:互联网 发布:arcgis js v44 api 编辑:程序博客网 时间:2024/05/16 10:18
MatLab中subplot可以实现同一个窗口内画多个图,非常方便,尤其是在用于对比观察图像时更是如此,然而,OpenCV中没有封装这样的功能。于是自己实现了一个类似的,当然功能没有MatLab中的subplot那样强大。
算法的关键是对IplImage中ROI(Regions Of Interest)的理解
先看官方文档中的解释http://docs.opencv.org/2.4.9/modules/core/doc/old_basic_structures.html#IplROI* roi
IplROI* roiRegion Of Interest (ROI). If not NULL, only this image region will be processed.
换言之,只要我们设置ROI,再将若干个小图粘到大图上就可以了。
算法的主要思想是先遍历所有的小图,得到最大的宽度和高度,以此确定大图的尺寸,然后再按照设置的行数和列数往上面贴图就可以了
void showMultiImages(char *name, int row, int col, int nImgs, ...) { if (row*col < nImgs) { cout << "Wrong parameters for showing multi images" << endl; return; } IplImage* eachImage; int width = 0, height = 0; va_list args; va_start(args, nImgs); for (int i = 0; i < nImgs; i++) { eachImage = va_arg(args, IplImage*); ((eachImage->width)>width) ? (width = (eachImage->width)) : width = width; ((eachImage->height) > height) ? (height = (eachImage->height)) : height = height; } va_end(args); //va_list arg2; va_start(args, nImgs); int gap = 10;//图像间隙 IplImage *img; img = cvCreateImage(cvSize(col*width + (col + 1)*gap, row*height + (row + 1)*gap), IPL_DEPTH_8U, 1); cvZero(img); CvPoint basePoint = cvPoint(gap, gap); CvPoint ltPos = basePoint; for (int i = 0; i < nImgs; i++) { if ((i%col == 0) && ltPos.x != basePoint.x) { ltPos.x = basePoint.x; ltPos.y += (gap + height); } eachImage = va_arg(args, IplImage*); cvSetImageROI(img, cvRect(ltPos.x, ltPos.y, eachImage->width, eachImage->height)); cvResize(eachImage, img); cvResetImageROI(img); ltPos.x += (gap + width); } va_end(args); showOneImage(name, img); }
效果
0 0
- OpenCV一个窗口画多个图
- OpenCV一个窗口显示多张图片
- opencv一个窗口显示多幅图像
- opencv一个窗口显示多张图像
- OpenCV一个窗口显示多张图片
- OpenCV一个窗口显示多张图片
- OpenCV 一个窗口显示多个图片
- 《OpenCV一个窗口显示两个摄像头》
- 如何利用opencv在一个窗口显示多张图片
- OpenCV中一个窗口显示两幅图像
- opencv在一个窗口里面显示多张图片
- OpenCV在一个窗口中显示多个视频子窗口
- OPENCV多窗口实现
- opencv如何隐藏窗口
- OpenCV窗口嵌入MFC
- opencv窗口鼠标绘图
- OpenCV学习(1)--在一个窗口同时显示多张图像
- Opencv图像识别从零到精通(11)---一个窗口多图显示
- 运行hadoop wordcount 时候报错解决办法
- apache.commons.beanutils.BeanUtils的使用
- 小马哥-----高仿三星S5 G900刷机拆机主板详图与开机界面图 防拆贴LY标 6572芯片 支持黑屏划屏解锁
- COCOS-Tiled地图坐标
- 第二周项目3---程序的多文件组织
- OpenCV一个窗口画多个图
- Myeclipse8.5如何安装反编译工具
- Python学习之路10——数字
- Mat 与IplImage *类型相互转换
- aix 命令:lsdev、lsattr、lscfg
- OC学习总结之block、category
- 第三周 项目2-三角形类2
- Linux压缩/解压命令
- Spring学习笔记之定时器