C++如何实现批量图片拼接
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍了C++如何实现批量图片拼接的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现批量图片拼接文章都会有所收获,下面我们一起来看看吧。具体代码如下/
千家信息网最后更新 2026年11月04日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安全错误
数据库的锁怎样保障安全
互联网高科技
互联网科技股
山东特亿宝互联网科技有限公司
互联网科技工作委员会
朗新科技与工业互联网
九亚互联网科技
百单互联网科技有限公司
电子科技大学互联网
互联网科技美容
成都仁贤领冠互联网科技有限公司
互联网实体化科技化
互联网科技实习生岗位职责
互联网时代科技改变生活
互联网时代的科技公司
江苏苏星互联网科技有限公司
黑云互联网科技有限公司
科技互联网公司两年变化
互联网科技创业计划的风险分析
广东猫王互联网科技有限公司电话
互联网企业和网络科技有限公司
互联网新科技
浩特互联网科技
深圳卡尔迅互联网科技有限公司怎么样
欧洲十大科技互联网公司
广州恒生互联网科技有限
北京市互联网新科技
杭州披云加互联网科技有限公司
工业互联网科技成果转化
长沙易易互联网科技有限公司
优雇互联网科技有限公司