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學習筆記(六) – 圖像的扣取