VScode+opencv——关于opencv多张图片拼接成一张图片的算法

用于显示多张图片------变量为图片组,图像尺寸,间隙,边界值,输出图片

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

//用于显示多张图片,变量为图片组,图像尺寸,间隙,边界值,输出图片
void ShowManyImages (const vector<cv::Mat>&srcImages,int nShowImageSize,int nSplitLineSize,int nAroundLineSize,Mat &outImage)
{
//图片数量
int nNumImages=srcImages.size();
//窗口大小
cv::Size nSizeWindows;
if(nNumImages>12)
{
    cout<<"不要超过12张,傻逼吧你"<<endl;
    return;
}
//根据图片数量设置
switch(nNumImages)
{
    case 1:nSizeWindows=Size(1,1);break;
    case 2:nSizeWindows=Size(2,1);break;
    case 3:
    case 4:nSizeWindows=Size(2,2);break;
    case 5:
    case 6:nSizeWindows=Size(3,2);break;
    case 7:
    case 8:nSizeWindows=Size(4,2);break;
    case 9:nSizeWindows=Size(3,3);break;
    default:nSizeWindows=Size(4,3);break;
}

//图像尺寸,间隙,边界值


//创建输出图像

const int imagesHeight =nShowImageSize*nSizeWindows.width+nAroundLineSize+(nSizeWindows.width-1)*nSplitLineSize;
const int imagesWidth =nShowImageSize*nSizeWindows.height+nAroundLineSize+(nSizeWindows.height-1)*nSplitLineSize;
Mat showWindowsImages(imagesWidth,imagesHeight,CV_8UC3,Scalar(0,0,0));

//提取小图像左上角x,y
int posX = (showWindowsImages.cols-(nShowImageSize*nSizeWindows.width+(nSizeWindows.width-1)*nSplitLineSize))/2;
int posY = (showWindowsImages.rows-(nShowImageSize*nSizeWindows.height+(nSizeWindows.height-1)*nSplitLineSize))/2;

int tempPosX=posX;
int tempPosY=posY;

//将每一幅图像放置到大图像对应位置

for (int i=0; i< nNumImages;i++)
{
//小图标转换
if((i%nSizeWindows.width==0) && (tempPosX!=posX))
{
   tempPosX=posX;
   tempPosY +=(nSplitLineSize + nShowImageSize);
}
//小图像置于大图像处
Mat tempImage=showWindowsImages(Rect(tempPosX,tempPosY,nShowImageSize,nShowImageSize));

//利用resize实现图像缩放
resize(srcImages[i],tempImage,Size(nShowImageSize,nShowImageSize));
tempPosX += (nSplitLineSize+nShowImageSize);

}
outImage = showWindowsImages;

}
相关推荐
艾莉丝努力练剑1 小时前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
_殊途2 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
珊瑚里的鱼6 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
秋说7 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法
AI technophile7 小时前
OpenCV计算机视觉实战(15)——霍夫变换详解
人工智能·opencv·计算机视觉
lifallen7 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
liupenglove7 小时前
自动驾驶数据仓库:时间片合并算法。
大数据·数据仓库·算法·elasticsearch·自动驾驶
python_tty9 小时前
排序算法(二):插入排序
算法·排序算法
然我9 小时前
面试官:如何判断元素是否出现过?我:三种哈希方法任你选
前端·javascript·算法
F_D_Z9 小时前
【EM算法】三硬币模型
算法·机器学习·概率论·em算法·极大似然估计