当前位置: 首页 > article >正文

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

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

#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.kler.cn/a/398541.html

相关文章:

  • git push时报错! [rejected] master -> master (fetch first)error: ...
  • 【项目开发】URL中井号(#)的技术细节
  • 动态规划之股票系列
  • 遇到 mysql_config not found 错误
  • 项目配置文件选择(Json,xml,Yaml, INI)
  • VSCode插件
  • 深入剖析Kubernetes监控体系:Prometheus、Metrics Server与Kubernetes监控体系
  • 二五、pxe自动装机
  • C# WPF .NET6程序可以直接运行?不需要装.NET运行时?
  • 【jvm】HotSpot中方法区的演进
  • 【java】值传递引用传递
  • JAVA中对象实体与对象引用有何不同?举例说明
  • Transformer学习笔记(一)
  • 机器学习基础03
  • Android 关于使用videocompressor库压缩没有声音和异常的问题
  • 专题二十_动态规划_简单多状态dp问题_买卖股票系列问题_算法专题详细总结
  • 「Qt Widget中文示例指南」如何创建一个窗口标志?(二)
  • Android Framework层介绍
  • 半导体器件与物理篇3 P-N结
  • Redis的Zset在排行榜中应用
  • 【数据结构】树——顺序存储二叉树
  • 面试题1111
  • 使用Kafka实现大规模数据流处理的最佳实践
  • 用哈希表封装myunordered_map/_set--C++
  • LeetCode100之回文链表(234)--Java
  • 药方新解:Spring Boot中药实验管理系统设计