openCV之基礎資料結構

2021-08-01 07:50:57 字數 2828 閱讀 9003

被乙個同學拉去面試乙個團隊,抱著試試看的心態去,竟然以後打算往人工智慧或者遊戲開發上面靠,計算機圖形學是必須要學的了。於是面試他們的影象處理組,最後陰差陽錯的進了。竟然進了就好好對待吧。opencv擼起來。

這兩天看了一些部落格,還有借了《opencv計算機視覺程式設計攻略》來看。打算繼續用部落格的方式記錄下我學習的程序吧。

先說下我對影象處理的簡單了解:一張是由許許多多的畫素點集合出來的產品。乙個畫素點一般有三個通道,分別代表著我們自然界的三原色,沒錯,計算機千姿百態的顏色也是由三原色(bgr)組合而成的。在圖形處理中,這三種顏色都有自己的數值(0-255),隨著數值的公升高,這些顏色也隨之變深。不同數值的bgr可以組成不同的顏色,一共有256*256*256鐘顏色。影象處理,就是通過演算法,對影象上某塊區域的畫素或者某乙個畫素點進行操作,達到我們想要的目標影象。

下面我們講解下在opencv中常用的一些資料結構:

一.mat類

mat是c++封裝好的乙個類。主要用於存放一張的資訊。包括所有畫素點,行數,列數,型別(灰度,彩色)等等。

mat image;//定義了乙個mat類的影象
二.mat型別的imread(),imwrite(),imshow(),namedwindow()

imread( const string& filename, int flags = imread_color ):

1.const string& filename :一般是「1.jpg」,「1.png」等格式的

2.int flag=imread_color:

flags >0返回乙個3通道的彩色影象。

flags =0返回灰度影象。

flags <0返回包含alpha通道的載入的影象。

imwrite( const string& filename, inputarray img,const std::vector& params = std::vector());

1.const string& filename:要儲存的檔名加字尾如:「貓.jpg」。

2.inputarray型別的img,也就是你想儲存的,一般填乙個mat型別的影象資料就行了。

3.const vector&型別的params,表示為特定格式儲存的引數編碼,它有預設值vector(),所以一般情況下不需要填寫。而如果要填寫的話,有下面這些需要了解的地方:

對於jpeg格式的,這個引數表示從0到100的質量(cv_imwrite_jpeg_quality),預設值是95.

對於png格式的,這個引數表示壓縮級別(cv_imwrite_png_compression)從0到9。較高的值意味著更小的尺寸和更長的壓縮時間,而預設值是3。

對於ppm,pgm,或pbm格式的,這個引數表示乙個二進位制格式標誌(cv_imwrite_pxm_binary),取值為0或1,而預設值是1。

void namedwindow(const string& winname, int flags=window_autosize );

1.引數一:視窗的名稱

2.引數二:視窗的標識

window_normal設定了這個值,使用者便可以改變視窗的大小(沒有限制)

window_autosize如果設定了這個值,視窗大小會自動調整以適應所顯示的影象,並且不能手動改變視窗大小。

window_opengl 如果設定了這個值的話,視窗建立的時候便會支援opengl。

void imshow(const string& winname, inputarray mat);

1.引數一:顯示視窗的名稱

2.引數二:名稱

例程:

mat image = imread("timg.jpg");//讀取一張

namedwindow("小貓咪");//命名乙個「小貓咪」的視窗

imshow("小貓咪",image);//顯示出image,如果沒有視窗「小貓咪」,便建立乙個

imwrite("小貓咪.jpg", image);//將image命名為「小貓咪」,並以jpg格式儲存

三.roi區域(region of interest,興趣區域)

有時我們需要讓乙個處理函式的只在影象的某個部分起作用。opencv就有這樣的機制,幫助我們定義出乙個影象中我們感興趣的區域,便於我們只對該區域內的影象進行操作。

方法一:第一種是使用cv:rect.顧名思義,cv::rect表示乙個矩形區域。指定矩形的左上角座標(建構函式的前兩個引數)和矩形的長寬(建構函式的後兩個引數)就可以定義乙個矩形區域。

//方法一

//在image的(150,150)處畫出乙個寬為40,高為50的矩形

mat imageroi = image(rect(150, 150, 40, 50));

方法二:指定感興趣行或列的範圍(range)。range是指從起始索引到終止索引(不包括終止索引)的一連段連續序列。cv::range可以用來定義range。如果使用cv::range來定義roi,那麼前例中定義roi的**可以重寫為:

//方法二

//range()函式,在圖中畫出乙個範圍,比如高150到150+50

mat imageroi = image(range(150, 150+50), range(150, 150+40));

OpenCV基礎資料結構

opencv基礎資料結構圖譜 影象資料結構 ipl 影象 iplimage int nchannels 色彩通道數 1,2,3,4 int depth 象素色深 ipl depth 8u,ipl depth 8s,ipl depth 16u,ipl depth 16s,ipl depth 32s,i...

opencv基礎資料結構

point 類不用多言,裡面兩個成員變數x,y。point 就是point2i,也是point,point 就是point2f,point 就是point2d。point3 類不太常用,跟point 類差不太多,成員變數x,y,z。size 類成員變數width height。size 就是size...

OpenCV基礎篇之Mat資料結構

filename matobj.cpp author xiahouzuoxin 163.com version v1.0 date thu 15 may 2014 09 12 45 pm cst brief include include include using namespace std us...