C++如何实现批量图片拼接
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍了C++如何实现批量图片拼接的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现批量图片拼接文章都会有所收获,下面我们一起来看看吧。具体代码如下/
千家信息网最后更新 2025年12月03日C++如何实现批量图片拼接
这篇文章主要介绍了C++如何实现批量图片拼接的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现批量图片拼接文章都会有所收获,下面我们一起来看看吧。
具体代码如下
/**函数功能:不同图片拼接 * 参数: * vectorpic_list : 图片名称列表 * int pic_cols_rows : horizontal==true,pic_cols_rows为生成图片的行数 horizontal==false,pic_cols_rows为生成图片的列数 * bool horizontal : true-先横向后纵向合成图片 false-先纵向后横向合成图片 * bool draw_rect : true-在图片边缘画矩形框 false-不在图片边缘画矩形框 * */void mergeDiffPic(vector pic_list, int pic_cols_rows, string output_file, bool horizontal=true, bool draw_rect=false){ int pic_cols = 0; int pic_rows = 0; int max_cols=0; int max_rows=0; int size_cols=0; int size_rows=0; vector tmp_cols; vector tmp_rows; //获取图片数量 int pic_num = pic_list.size(); vector input(pic_num); Mat merge; for(int i=0; i = pic_num) break; //保存每行图片的最大宽度,用于确定合成图的宽度 max_cols += input[i*pic_cols+j].cols; max_rows = (max_rows>input[i*pic_cols+j].rows?max_rows:input[i*pic_cols+j].rows); } //合成图的宽度和高度 size_cols = (max_cols>size_cols?max_cols:size_cols); size_rows += max_rows; if ((i*pic_cols+j) >= pic_num) break; } //创建size_cols×size_rows大小的空白图片,用于摆放小图 Size mergesize(size_cols,size_rows); merge.create(mergesize, CV_MAKETYPE(input[0].depth(), 3));//rgb 3通道 merge = Scalar::all(0); vector temp(pic_num); //摆放图片 for (i=0;i = pic_num) break; //确定第(i*pic_cols+j)张图在merge上的位置 temp[i*pic_cols+j] = merge(Rect(sum_cols, tmp_rows[i], input[i*pic_cols+j].cols, input[i*pic_cols+j].rows)); //下一张图的起始位置(x坐标) sum_cols += input[i*pic_cols+j].cols; input[i*pic_cols+j].copyTo(temp[i*pic_cols+j]); } if ((i*pic_cols+j) >= pic_num) break; } }else{ pic_rows = pic_cols_rows; pic_cols = pic_num/pic_rows; if (pic_num%pic_rows != 0) pic_cols += 1; int i = 0; int j = 0; for (i=0;i = pic_num) break; max_rows += input[i*pic_rows+j].rows; max_cols = (max_cols>input[i*pic_rows+j].cols?max_cols:input[i*pic_rows+j].cols); } size_rows = (max_rows>size_rows?max_rows:size_rows); size_cols += max_cols; if ((i*pic_rows+j) >= pic_num) break; } //std::cout< temp(pic_num); merge.create(mergesize, CV_MAKETYPE(input[0].depth(), 3));//rgb 3通道 merge = Scalar::all(0); for (i=0;i = pic_num) break; temp[i*pic_rows+j] = merge(Rect(tmp_cols[i], sum_rows, input[i*pic_rows+j].cols, input[i*pic_rows+j].rows)); sum_rows += input[i*pic_rows+j].rows; input[i*pic_rows+j].copyTo(temp[i*pic_rows+j]); } if ((i*pic_rows+j) >= pic_num) break; } } //显示图片 //imshow("merge", merge); //保存图片 imwrite(output_file.c_str(), merge); //waitKey(0); }
//调用#include#include #include #include using namespace std;using namespace cv;int main(){ vector pic_list; pic_list.push_back("1.jpg"); pic_list.push_back("2.jpg"); pic_list.push_back("3.jpg"); mergeDiffPic(pic_list, 2, "merge1.jpg"); mergeDiffPic(pic_list, 1, "merge2.jpg",false); mergeDiffPic(pic_list, 3, "merge3.jpg",false,true); return 0;}
//编译g++ merge.cpp `pkg-config --cflags --libs opencv`
merge1.jpg
merge2.jpg
merge3.jpg
关于"C++如何实现批量图片拼接"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C++如何实现批量图片拼接"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
图片
C++
位置
宽度
知识
矩形
最大
内容
横向
篇文章
纵向
边缘
通道
高度
不同
代码
价值
函数
功能
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发的花费比例
极路由改无线打印服务器
多台服务器同网段掉ip
网络技术投资预算比较
pptp免费服务器地址
信息通信网络技术学校排名
ice服务器如今什么样
设计软件开发 书籍
不同服务器数据库互相访问吗
网络安全应用与标准第五版答案
临汾软件开发的公司电话
浦东新区应用软件开发服务
软件开发包含数学吗
河北省公安厅网络安全防护项目
成都软件开发大公司
服务器cpu利用率多少合理
戴尔笔记本软件开发
恒生汇源数据库
美多拉互联网科技
汇雅超星电子图书数据库
温州网络安全工程师招聘
投资重心从移动互联网转向科技
在线教学系统的数据库设计
网络安全包括信息安全么
网络技术支持学习
上海软件开发公司哪里好
php数据库优缺点
数据库数据表叙述
计算机网络技术基础第2版电子书
网络安全相关技术和策略