1.涉及函数
1.1 rowRange
- 函数功能
获取图像中的选定行,该函数为Mat类的一个方法。 - 具体定义
inline Mat Mat::rowRange(int startrow, int endrow) const
{
return Mat(*this, Range(startrow, endrow), Range::all());
}
- 相关参数
int startrow – 起始行号,下标从0开始
int endrow – 结束行号 - 返回值
Mat – 包含选定行内容的图像矩阵
注意:
该函数返回的图像矩阵为原始图像的浅拷贝,改变目标图像矩阵,同样会改变原始图像。
1.2 colRange
- 函数功能
获取图像中的选定列,该函数为Mat类的一个方法。 - 具体定义
inline Mat Mat::colRange(int startcol, int endcol) const
{
return Mat(*this, Range::all(), Range(startcol, endcol));
}
- 相关参数
int startcol – 起始列号
int endcol – 结束列号 - 返回值
Mat – 包含指定列内容的图像矩阵
注意:
该函数返回的图像矩阵为原始图像的浅拷贝,改变目标图像矩阵,同样会改变原始图像。
1.3 colRange
- 函数功能
将当前图像内容拷贝至目标图像,该函数为Mat类的一个方法。 - 具体定义
void copyTo( OutputArray m ) const;
- 相关参数
OutputArray m – 目标图像 - 返回值
无
2.代码实例
- 代码说明
本例主要展示如何对两幅图像进行拼接操作。 - 测试平台
1.开发语言:C++
2.开发工具:VS2015
3.操作系统:Win7 X64 - 具体代码
#include <iostream>
using namespace std;
#include "cv.h"
#include "opencv2\opencv.hpp"
using namespace cv;
#if _DEBUG
#pragma comment(lib,"opencv_world340d.lib")
#else
#pragma comment(lib,"opencv_world340.lib")
#endif
//函数功能:按照上下进行图像拼接,拼接之后,A图像在上,B图像在下
//参数: cv::Mat A[IN] -- 图像A
// cv::Mat B[IN] -- 图像B
// cv::Mat -- 拼接后的图像
cv::Mat TopBottomMerge(cv::Mat A, cv::Mat B)
{
int totalRows = A.rows + B.rows;
cv::Mat mergedDescriptors(totalRows, A.cols, A.type());
cv::Mat submat = mergedDescriptors.rowRange(0, A.rows);
A.copyTo(submat);
submat = mergedDescriptors.rowRange(A.rows, totalRows);
B.copyTo(submat);
return mergedDescriptors;
}
//函数功能:按照左右进行图像拼接,拼接之后,A图像在左,B图像在右
//参数: cv::Mat A[IN] -- 图像A
// cv::Mat B[IN] -- 图像B
// cv::Mat -- 拼接后的图像
cv::Mat LeftRightMerge(cv::Mat A, cv::Mat B)
{
int totalCols = A.cols + B.cols;
cv::Mat mergedDescriptors(A.rows, totalCols, A.type());
cv::Mat submat = mergedDescriptors.colRange(0, A.cols);
A.copyTo(submat);
submat = mergedDescriptors.colRange(A.cols, totalCols);
B.copyTo(submat);
return mergedDescriptors;
}
int main()
{
Mat src1 = imread("D:\\OpencvTest\\lena.jpg");
Mat src2 = imread("D:\\OpencvTest\\test2.jpg");
if (src1.data != NULL && src2.data!=NULL)
{
//图像上下拼接
Mat mergeTB = TopBottomMerge(src1, src2);
//图像左右拼接
Mat mergeLR = LeftRightMerge(src1, src2);
imshow("图A", src1);
imshow("图B", src2);
imshow("上下拼接", mergeTB);
imshow("左右拼接", mergeLR);
cvWaitKey(0);
}
else
{
cout << "图片加载失败,请检查文件是否存在!" << endl;
}
getchar();
return 0;
}
- 输出截图
栏目导航
上一篇:Opencv学习笔记(四) – 图像的放大与缩小
下一篇:Opencv学习笔记(六) – 图像的扣取