1. 得到mat型別img的size,可以使用函式img.size(),注意這裡有括號。但是在需得到img的行和列時,不需要使用括號,即使用img.rows和img.cols.
2. 已經定義好了img為mat型,但是沒有初始化,在後面程式的任何乙個位置可以使用下面的**初始化img,比如img=mat(***1,***2),其中***1是矩形區域的大小,***2是陣列內資料型別。
3. 在opencv中畫素點的資料型別能找到對應類似char,int,float,double的,比如說是分別為cv_8uc1,cv_16uc1,cv_32fc1, cv_64fc1,一定要注意是沒有這一說法的cv_16fc1。
4. 在對opencv工程進行debug時,如果想檢視mat型內部的資料,直接在變數監視器裡面看是不行的,且觀察時其內部還有可能報錯。最好是將mat型別資料cout到螢幕終端觀察。
5. 將乙個vector型別的變數轉換成乙個mat型變數,可以採用下面的方法: vector&c=contours(0);mat cnew;cnew=mat(c);
6.scalar與cvscalar類似,都是標量,用於儲存畫素值的,有4個通道,每個通道可存double型,其內部定義為:
typedef struct cvscalar
cvscalar;
7.當影象畫素值為hsv空間時,hsv中3個分量的取值範圍為[0180],[0 255],[0,255].
8.opencv中的nan表示是非數字,即not a number,inf表示無窮大,比如+inf:正無窮,-inf:負無窮。
9.rgb空間是類似人眼工作機制,被各種顯示裝置採用。hsv,hls是描述顏色更自然的方法,去掉最後乙個元素可以使演算法對光照不敏感。ycrcb在jpeg中廣泛使用。lab是在感知上比較均勻的顏色空間,適合度量2個顏色之間的距離。
10.在使用zeros函式時,如果是用這個zeros(int rows, int cols, int type),注意第乙個引數為rows,即影象的高度。如果是用zeros(size size, int type)而size又為size(cols, rows),其第乙個引數為cols,即影象的寬度。即mat大小先是高度然後是寬度,而size大小顯示寬度然後是高度。
11. size wholesize;
point roiofs;
img.locateroi(wholesize, roiofs);
locateroi在此處是如果img影象是從其它父影象中某一部分得來的,那麼其父影象221 的大小尺寸就為whlesize了,img影象左上角那個點相對于父影象的左上角位置就為點roiofs了。
12. 在opencv學習中,經常會讀一些基於1.0版本的opencv**,如果我們需要在2.0以後版本中使用已有的**,遇到的問題最多的就是mat和iplimage*之間的轉換,現在舉個例子來簡單說明一下這2者之間的轉換。
假設已經定義: mat src;
iplimage* img;
並且也假設src或者img中已經有了資料。則如果需要將src轉換到img,應該使用下面的語句:
img = &src.operator iplimage();
如果是將img轉換到src,則直接使用下面的語句:
src = mat(img);
這是opencv基於c版本和c++版本混合程式設計的處理方法。
13. 在opencv的core.hpp裡面有autobuffer<>()函式,該函式為自動分配一段指定大小的記憶體,並且可以指定記憶體中資料的型別。
14.呼叫mat::copyto()函式時,如果需要有mask操作,則不管源影象是多少通道的,其mask矩陣都要定義為單通道,另外可以對乙個mask矩陣畫乙個填充的矩形來達到使mask矩陣中對應roi的位置的值為設定值,這樣就不需要去一一掃瞄賦值了。
15. 在使用opencv的mat矩陣且需要對該矩陣進行掃瞄時,一定要注意其取值順序,比如說列和行的順序,如果弄反了,則經常會報記憶體錯誤。
16. 在使用opencv內部的判斷條件時應該使用cv_assert()函式,而不是cv_assert()。
17. 通過實驗測試發現,雖然經過calchist()函式計算過後的直方圖儲存在hist中,這裡hist是乙個mat型別,並且如果計算的是一維的直方圖的話,則hist是乙個列向量。
18. 當mat中資料的型別為cv_16uc1的時候,這裡的16u並不是指unsigned int,而是指的是unsigned short int,因為在opencv框架中,int不是16位的,而是32位的。沒想到我使用opencv一年了,今天才弄清楚這個。
19. 座標體系中的零點座標為的左上角,x軸為影象矩形的上面那條水平線;y軸為影象矩形左邊的那條垂直線。該座標體系在諸如結構體mat,rect,point中都是適用的。(雖然網上有學著說opencv中有些資料結構的座標原點是在的左下角,但是我暫時還沒碰到過)。
20. 在使用image.at(x1,x2)來訪問影象中點的值的時候,x1並不是中對應點的x軸座標,而是中對應點的y座標。因此其訪問的結果其實是訪問image影象中的point(x2, x1)點,即與image.at(point(x2,x1))效果相同。
21. 如果所畫圖像是多通道的,比如說image影象的通道數時n,則使用mat::at(x,y)時,其x的範圍依舊是0到image的height,而y的取值範圍則是0到image的width乘以n,因為這個時候是有n個通道,所以每個畫素需要占有n列。但是如果在同樣的情況下,使用mat::at(point)來訪問的話,則這時候可以不用考慮通道的個數,因為你要賦值給獲取mat::at(point)的值時,都不是乙個數字,而是乙個對應的n維向量。
22. 多通道影象在使用minmaxloc()函式是不能給出其最大最小值座標的,因為每個畫素點其實有多個座標,所以是不會給出的。因此在程式設計時,這2個位置應該給null。
OpenCV程式設計注意事項
opencv讀取彩色圖是是bgr格式,可以通過以下函式來轉換 opencv中影象的左上角為座標系的原點,這種座標繫在結構體mat,rect,point中都是適用的。opencv中座標體系的x軸為影象矩形的上面那條水平線,從左往右 y軸為影象矩形左邊的那條垂直線,從上往下 參見上圖 用image.at...
OpenCV安裝的注意事項
安裝 按照官方文件 一步一步來 cmake的配置命令 cmake d cmake build type release d cmake install prefix usr local d opencv extra modules path home opencv3.2 opencv contrib...
編譯opencv程式的注意事項
1 在選單 生產 配置管理器中,根據專案和所安裝opencv的實際,選擇debug release x32 x64。一旦選錯,就找不到相應的庫。3 在程式的main函式之前,指定呼叫的庫函式名,例如 pragma comment lib,opencv imgproc247d.lib pragma c...