C++如何实现批量图片拼接
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要介绍了C++如何实现批量图片拼接的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现批量图片拼接文章都会有所收获,下面我们一起来看看吧。具体代码如下/
千家信息网最后更新 2025年02月07日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安全错误
数据库的锁怎样保障安全
oralce数据库在ao
时序图用户服务器
怎样防止网络安全问题
大学里面的网络安全培训机构
计算机网络技术教师面试
高核心服务器
网络安全国教育
服务器禁止创建角色
互联网大会东土科技
AR导航软件开发
oracle数据库访问慢
石家庄学习网络安全简单易学
中国数据服务器在哪
国网无线专网 网络安全
监控数据库网站篡改
深圳市诚宏软件开发...
网络安全法第38条
中学生网络安全主题绘画
魔兽赛季服服务器部落大服
软件开发收费定金
上海炫客网络技术有限公司
win10网络安全密码
重庆软件开发中心
保定软件开发大概费用
中国网络安全产业报告发布会
数据库日期定义
emby公益服务器设置
国家安全网络安全内容
魔兽世界数据库120
软件开发的商业形势