OpenCV座標體系的初步認識

2021-06-17 16:40:52 字數 1386 閱讀 2459

實驗基礎

本次實驗通過乙個簡短的例子,主要來說明下面4個問題:

1. 座標體系中的零點座標為的左上角,x軸為影象矩形的上面那條水平線;y軸為影象矩形左邊的那條垂直線。該座標體系在諸如結構體mat,rect,point中都是適用的。(opencv中有些資料結構的座標原點是在的左下角,可以設定的)。

2. 在使用image.at(x1, x2)來訪問影象中點的值的時候,x1並不是中對應點的x軸座標,而是中對應點的y座標。因此其訪問的結果其實是訪問image影象中的point(x2, x1)點,即與image.at(point(x2, x1))效果相同。

3. 如果所畫圖像是多通道的,比如說image影象的通道數時n,則使用mat::at(x, y)時,其x的範圍依舊是0到image的height,而y的取值範圍則是0到image的width乘以n,因為這個時候是有n個通道,所以每個畫素需要占有n列。但是如果在同樣的情況下,使用mat::at(point)來訪問的話,則這時候可以不用考慮通道的個數,因為你要賦值給獲取mat::at(point)的值時,都不是乙個數字,而是乙個對應的n維向量。

4. 多通道影象在使用minmaxloc()函式是不能給出其最大最小值座標的,因為每個畫素點其實有多個座標,所以是不會給出的。因此在程式設計時,這2個位置應該給null。

實驗**及注釋

main.cpp: 

#include #include #include using namespace std;

using namespace cv;

int main()

實驗結果:單通道影象的輸出結果如下所示:

由上圖可以看出,黑色的影象中有2個白色的點(讀者可以仔細看下,由於只有1個畫素點,所以需要自己找下,呵呵)的位置是不同的,因此可以證明mat::at(x,y)和mat::at(point(x, y))是有區別的。

3通道影象的輸出結果如下所示:

由上圖可以看出,3通道的影象也是有2個點的,但是程式中在使用mat::at(x, y)其y的值為300和302,這已經超出了影象的寬度256。這同時證明了實驗基礎中的第3點。

後台輸出結果如下:

實驗總結:由此可見,平時一定要注意一些細節上的東西。

OpenCV座標體系的初步認識

前言 相信很多朋友在使用opencv的時候會遇到乙個小問題,且有時候對這樣的小問題沒有引起足夠的重視,或者通過表面想當然的去程式設計,所以除錯 時出現一些莫名其妙的問題,最後發現問題時時間已經過去了一大把。最近我在除錯乙個專案時就遇到過這種情況,即mat at x,y 和mat at point x...

OpenCV座標體系的初步認識

實驗基礎 本次實驗通過乙個簡短的例子,主要來說明下面4個問題 1.座標體系中的零點座標為的左上角,x軸為影象矩形的上面那條水平線 y軸為影象矩形左邊的那條垂直線。該座標體系在諸如結構體mat,rect,point中都是適用的。opencv中有些資料結構的座標原點是在的左下角,可以設定的 2.在使用i...

OpenCV座標體系的初步

主要說明4個問題 1.座標體系中的零點座標為的左上角。x軸為影象矩形的上面那條水平線 y軸為影象矩形左邊的那條垂直線。該座標體系在諸如結構體mat,rect,point中都是適用的。opencv中有些資料結構的座標原點是在的左下角,可以設定的 2.在使用image.at x1,x2 來訪問影象中點的...