1. 程式人生 > >Opencv學習筆記(六) -- 影象的扣取

Opencv學習筆記(六) -- 影象的扣取

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; }

  • 輸出截圖
    這裡寫圖片描述