std::vector<std::vector<Mat> > partitionImage(Mat&src,int rows,int cols)

函数中有三个输入参数,第1个src是原图像;第2个参数rows是网格的行数,第三个参数cols是网格的列数;返回的是二维矢量数组。

///*13. 图像的二维分割,即将图像分割成rows行、cols列的小格子—array[rows][cols],
/// 保存在二维矢量vector中,
std::vector<std::vector<Mat> > partitionImage(Mat&src,int rows,int cols)
{
std::vector<std::vector<Mat> > array(rows,std::vector<Mat>(cols)); int irows=src.rows,icols=src.cols;//原图像的行数、列数
int dr=irows/rows,dc=icols/cols;//分割后的小块图像的行数、列数
//分割行、列数与图像的行列数不能整除时,有效图像偏移delt_x、delt_y。
/// 也就是将不能整除的余数像素丢弃,丢弃的方法就是,在图像上、下、左右
/// 各删除余数一半的像素。比如行余数为4,则在图像顶部、底部分别删除2行像素。
int delt_y=(irows%rows)/,delt_x=(icols%cols)/;
for(int i=;i<rows;i++)
    {

        for(int j=;j<cols;j++)
{
int x=j*dc+delt_x,y=i*dr+delt_y;
array[i][j]=src(cv::Rect(x,y,dc,dr));
}
}
return array;
}

测试主程序如下:

int main()
{
Mat img=imread("D:/CodeWork/MyImage/lena.jpg",);
vector<vector<Mat> > parts=partitionImage(img,,);
imshow("parts 00",parts[][]);
imshow("parts 01",parts[][]);
imshow("parts 02",parts[][]); imshow("rogin img",img);
waitKey();
return ;
}

输出结果如下:

下面是分割后的图像阵列:

    

在Opencv中将一幅图像均分成M* N个小图像的更多相关文章

  1. Opencv中将CvMat转为IplImage

    Opencv中将CvMat转为IplImage,并在内存获得起头指针,而不用cvSaveImage(),贴上代码 IplImage * imgg = NULL; imgg = cvCreateImag ...

  2. OpenCV探索之路(二十五):制作简易的图像标注小工具

    搞图像深度学习的童鞋一定碰过图像数据标注的东西,当我们训练网络时需要训练集数据,但在网上又没有找到自己想要的数据集,这时候就考虑自己制作自己的数据集了,这时就需要对图像进行标注.图像标注是件很枯燥又很 ...

  3. python将整数均分成N等分

    在python中,需要将整数均分成N等分.python divide integers N equal parts sum # 拆分整数 def split_integer(m, n): assert ...

  4. 将一个list均分成n个list

    /** * 将一个list均分成n个list,主要通过偏移量来实现的 * @param source * @return */ public <T> List<List<T&g ...

  5. 图像金字塔(pyramid)与 SIFT 图像特征提取(feature extractor)

    David Lowe(SIFT 的提出者) 0. 图像金字塔变换(matlab) matlab 对图像金字塔变换接口的支持(impyramid),十分简单好用. 其支持在reduce和expand两种 ...

  6. Opencv实现两幅图像融合

    实现两幅图像线性(不同系数下)的融合涉及到Opencv中两个关键的方法,addWeighted()和createTrackbar() addWeighted方法: 函数原型: void addWeig ...

  7. OpenCv实现两幅图像的拼接

    直接贴上源码 来源:http://www.myexception.cn/image/1498389.html 实验效果 Left.jpg right.jpg ImageMatch.jpg #inclu ...

  8. OpenCV --- 实现两幅图像并排合并(ROI)

    Mat img1 = imread("1.png"); Mat img2 = imread("2.png"); int height = img1.rows; ...

  9. OpenCV 对两幅图像求和(求混合(blending))

    #include <cv.h> #include <highgui.h> #include <iostream> using namespace cv; int m ...

随机推荐

  1. Django学习系列13:Django ORM和第一个模型

    ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列.处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码. 在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示 ...

  2. MySQL--关于MySQL的那些练习题

    之前联系了一些MySQL的查询相关知识,现在补充作为一个记录,免得自己忘记. 致谢博主:https://blog.csdn.net/dehu_zhou/article/details/52881587 ...

  3. lazarus中的TSQLQuery注意事项

    lazarus中的TSQLQuery相当于delphi中的TClientDataSet,必须  SQLQuery.ApplyUpdates;  SQLTransaction.Commit; 数据才能提 ...

  4. windows和linux开机自启动设置

    Windows 1,启动快捷方式   开始>程序>启动 文件夹中拷贝进去需要开机启动的程序快捷方法,此方法需要相应用户登录系统2,注册为服务,设置启动方式为自动   a,    sc命令  ...

  5. Jquery实现div左右重复来回走动

    <!DOCTYPE HTML><html><head> <meta charset=utf-8 /> <title>UFO来了</ti ...

  6. ORACLE/SQL用函数进行每年,每月,每周,每日的数据汇总

    15/03/21  用函数进行每年,每月,每周,每日的数据汇总 假设一个销售明细表 sale_detail 含有 国家(country),销售时间(sale_time),销售额(sale_money) ...

  7. 计算机网络(九),HTTP简介

    目录 1.超文本传输协议HTTP的主要特点 2.HTTP请求结构 3.HTTP响应结构 4.http请求/响应的步骤 九.HTTP简介 1.超文本传输协议HTTP的主要特点 (1)支持客户/服务器模式 ...

  8. 一些简单题(1)(Source : NOIP历年试题+杂题)

    最近也写了些许题目吧,还是写写博客,捋捋思路. P2216 [HAOI2007]理想的正方形 求一个$a \times b(a,b \leq 10^3)$的矩阵,求出一个$n \times n (n ...

  9. 使用 Reactjs + Mobx + React-Router 开发项目时 VSCode 编辑器报警 TS 相关的问题(提示experimentalDecorators )

    vscode 对于 JS support 的支持需要配置,在项目根目录下创建一个 jsconfig.json 文件,把以下内容贴入后保存,重启项目即可生效(去掉提示). { "compile ...

  10. AtCoder AGC022C Remainder Game (图论)

    题目链接 https://atcoder.jp/contests/agc022/tasks/agc022_c 题解 大水题一道 就他给的这个代价,猜都能猜到每个数只能用一次 仔细想想,我们肯定是按顺序 ...