Opencv學習筆記(六) -- 影象的扣取
阿新 • • 發佈:2019-01-26
1.涉及函式
1.1 Range()
- 函式功能
選定區域 - 具體定義
inline Range::Range(int _start, int _end)
: start(_start), end(_end) {}
- 相關引數
int _start – 範圍起點,包含該點
int _end – 範圍結束點,不包含該店 - 返回值
Range – 設定的範圍
1.2 operator()
- 函式功能
獲取影象中的指定區域,該函式為Mat類的一個過載運算子。 - 具體定義
inline Mat Mat::operator()( Range _rowRange, Range _colRange ) const
{
return Mat(*this, _rowRange, _colRange);
}
- 相關引數
Range _rowRange – 扣取行範圍
iRange _colRange – 扣取列範圍 - 返回值
Mat – 包含選定行內容的影象矩陣
注意:
該函式返回的影象矩陣為原始影象的淺拷貝,改變目標影象矩陣,同樣會改變原始影象。
1.3 clone
- 函式功能
將影象內容拷貝至目標影象矩陣,該函式為Mat類的一個方法。 - 具體定義
inline Mat Mat::clone() const
{
Mat m;
copyTo(m);
return m;
}
- 相關引數
無 - 返回值
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
int main()
{
Mat src = imread("D:\\OpencvTest\\lena.jpg");
if (src.data != NULL)
{
Mat tempRoiImg;
//扣取影象右下角部分
tempRoiImg = src(Range(src.cols/2,src.cols), Range(src.rows/2, src.rows));
//為了防止對選定影象的操作影響原始影象,所以進行一次影象克隆操作
Mat finalRoiImg = tempRoiImg.clone();
imshow("原始影象", src);
imshow("右下角影象", finalRoiImg);
imwrite("D:\\OpencvTest\\roi.jpg", finalRoiImg);
cvWaitKey(0);
}
else
{
cout << "圖片載入失敗,請檢查檔案是否存在!" << endl;
}
getchar();
return 0;
}
- 輸出截圖