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

server/2024/11/18 12:46:44/

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

#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;}


http://www.ppmy.cn/server/142914.html

相关文章

vue之axios根据某个接口创建实例,并设置headers和超时时间,捕捉异常

import axiosNew from axios;//给axios起个别名//创建常量实例 const instanceNew axiosNew.create({//axios中请求配置有baseURL选项&#xff0c;表示请求URL的公共部分&#xff0c;url baseUrl requestUrlbaseURL: baseURL,//设置超时时间为20秒timeout: 20000,headers: {…

从 Rust 官方文档理解 Ownership

Rust 的 Ownership 感觉仍然很复杂&#xff0c;但 Rust 官方文档 The Rust Programming Language - Understanding Ownership 所费篇幅似乎并不多。下面就阅读该文档并记录下来对 Rust Ownership 的理解&#xff0c;相信官方的文档会表述的比准确而清晰。 本文中对 Ownership,…

鸿蒙元服务 证书过期替换 ERROR - hap-sign-tool: error: Signature verify failed

昨天需要升级一版元服务&#xff0c;打包时发现签名过期了&#xff0c;之前替换了App的签名以为很顺利&#xff0c;结果还是搞了小半天。 证书部分 遇到问题&#xff1a;ERROR - hap-sign-tool: error: Signature verify failed 这里需要将p12也替换成最新的。就是说证书文件…

[Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比

目录 一&#xff1a;Mysql 容器化安装 二&#xff1a;Redis 容器化安装 Redis 简介 Redis 容器创建 三&#xff1a;C容器制作 四&#xff1a;容器资源更新 常见问题 一&#xff1a;Mysql 容器化安装 进入 mysql 的镜像网站&#xff0c;查找 mysql 的镜像 mysql docker…

Layer1公链介绍:Solana

https://solana.com/ Solana 是一个开源的高性能、无许可区块链项目&#xff0c;由 Anatoly Yakovenko 于2017年创立&#xff0c;旨在支持所有高增长和高频区块链应用&#xff0c;并实现全球金融系统的民主化. 技术亮点 历史证明&#xff08;PoH&#xff09;共识机制&#xf…

数据结构王道P234第二题

#include<iostream> using namespace std; int visit[MAxsize]; int color[MaxSize];//1表示红&#xff0c;2表示白&#xff1b; bool dfs(Graph G, int i){visit[i]1;ArcNode *p;bool flag1;for(pG.vertices[i].firsrarc; p ; pp->next){int jp->adjvex;if(!visi…

使用nossl模式连接MySQL数据库详解

使用nossl模式连接MySQL数据库详解 摘要一、引言二、nossl模式概述2.1 SSL与nossl模式的区别2.2 选择nossl模式的场景三、在nossl模式下连接MySQL数据库3.1 准备工作3.2 C++代码示例3.3 代码详解3.3.1 初始化MySQL连接对象3.3.2 连接到MySQL数据库3.3.3 执行查询操作3.3.4 处理…

手机直连卫星NTN通信初步研究

目录 1、手机直连卫星之序幕 2、卫星NTN及其网络架构 2.1 NTN 2.2 NTN网络架构 3、NTN的3GPP标准化进程 3.1 NTN需要适应的特性 3.2 NTN频段 3.3 NTN的3GPP标准化进程概况 3.4 NTN的3GPP标准化进程的详情 3.4.1 NR-NTN 3.4.1.1 NTN 的无线相关 SI/WI 3.4.1.2…