OpenCV for iOS 學習筆記(一)—— Mat - 基本圖像容器

環(huán)境配置 :

OpenCV在xCode中的安裝與環(huán)境配置

使用xcode創(chuàng)建工程 使用cocoaPods 配置工程:

cd 工程名 ? ?-------> 導入工程路徑

pod init

pod search OpenCV? --------> 搜索OpenCV 復制到Podfile文件

pod install ?---------> 安裝

安裝 好之后 需要 將工程中 要引用openCV頭文件的.m文件 改為.mm 告訴編譯器要兼容c++

頭文件引用? #import? <opencv2/opencv.hpp>

圖像處理引用: #import<opencv2/imgcodecs/ios.h> ? ?

注:未全 待補充


using namespace cv;? ? 使用CV時需要寫成: cv::? 將 using namespace cv 加入引入頭文件下方 某些地方可省略 cv::

如下代碼 Mat 沒加入本句應寫成 :? ? cv::Mat

-----------------------------------------------------------------------------------------------

Mat A, C;? ? /**< 只創(chuàng)建信息頭 */

Mat B(A);? ? /**< 拷貝構(gòu)造函數(shù) (只拷貝信息頭) */

C = A;? ? ? /**< 賦值 */

//? ? Mat D (A, Rect(10, 10, 100, 100) );

Mat E = A(Range::all(), Range(1, 3));

Mat F = A.clone(); /**< 拷貝圖像矩陣A到F */

Mat G;

A.copyTo(G); /**< 拷貝圖像矩陣A到G */

/**

* ? 注意:

*? OpenCV函數(shù)中輸出圖像的內(nèi)存分配是自動完成的(如果不特別指定的話)。

*? 使用OpenCV的C++接口時不需要考慮內(nèi)存釋放問題。

*? 賦值運算符和拷貝構(gòu)造函數(shù)( ctor )只拷貝信息頭。

*? 使用函數(shù) clone() 或者 copyTo() 來拷貝一副圖像的矩陣。

*/

// 構(gòu)造函數(shù)

Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255));

std::cout << "M = " << std::endl << "" << M << std::endl << std::endl;

/** 該行代碼表示創(chuàng)建一個行數(shù)為2,列數(shù)為2的圖像,圖像元素是8位無符號整數(shù)型,3通道,

圖像的所有像素值被初始化為(0, 0, 255)? OpenCV默認顏色順序為 BGR

*? CV_8UC(n) 自定義通道數(shù) n:通道數(shù)

*/

輸出結(jié)果為:?


常用的構(gòu)造函數(shù)有:

?Mat::Mat()無參數(shù)構(gòu)造方法;

?Mat::Mat(int rows, int cols, int type)

創(chuàng)建行數(shù)為rows,列數(shù)為col,類型為type的圖像;

?Mat::Mat(Size size, int type)

創(chuàng)建大小為size,類型為type的圖像;

?Mat::Mat(int rows, int cols, int type, const Scalar& s)24

創(chuàng)建行數(shù)為rows,列數(shù)為col,類型為type的圖像,并將所有元素初始

化為值s;

?Mat::Mat(Size size, int type, const Scalar& s)

創(chuàng)建大小為size,類型為type的圖像,并將所有元素初始化為值s;

?Mat::Mat(const Mat& m)

將m賦值給新創(chuàng)建的對象,此處不會對圖像數(shù)據(jù)進行復制,m和新對象

共用圖像數(shù)據(jù);

?Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)創(chuàng)建行數(shù)為rows,列數(shù)為col,類型為type的圖像,此構(gòu)造函數(shù)不創(chuàng)建

圖像數(shù)據(jù)所需內(nèi)存,而是直接使用data所指內(nèi)存,圖像的行步長由step指定。

?Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)創(chuàng)建大小為size,類型為type的圖像,此構(gòu)造函數(shù)不創(chuàng)建圖像數(shù)據(jù)所需

內(nèi)存,而是直接使用data所指內(nèi)存,圖像的行步長由step指定。

?Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)創(chuàng)建的新圖像為m的一部分,具體的范圍由rowRange和colRange指

定,此構(gòu)造函數(shù)也不進行圖像數(shù)據(jù)的復制操作,新圖像與m共用圖像數(shù)

據(jù);

?Mat::Mat(const Mat& m, const Rect& roi)

創(chuàng)建的新圖像為m的一部分,具體的范圍roi指定,此構(gòu)造函數(shù)也不進

行圖像數(shù)據(jù)的復制操作,新圖像與m共用圖像數(shù)據(jù)。

這些構(gòu)造函數(shù)中,很多都涉及到類型type。type可以是CV_8UC1,CV_16SC1,...,CV_64FC4等。里面的8U表示8位無符號整數(shù),16S表示16位有符號整數(shù),64F表示64位浮點數(shù)(即double類型);C后面的數(shù)表示通道數(shù),例如C1表示一個

通道的圖像,C4表示4個通道的圖像,以此類推。

參考資料:OpenCV-基本圖像容器處理?

轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容