opencv中的畫素座標系與操作畫素的方法

2021-09-10 15:08:40 字數 1226 閱讀 4765

opencv中畫素座標系的座標原點在影象的左上角,這種座標繫在結構體mat,rect,point中都是適用的。在point(x,y)和rect(x,y)中,第乙個引數x代表的是元素所在影象的列數,第二個引數y代表的是元素所在影象的行數。

座標體系的x軸為影象矩形的上面那條水平線,從左往右;y軸為影象矩形左邊的那條垂直線,從上往下。

以影象左上角為原點建立以畫素為單位的直接座標系u-v。畫素的橫座標u與縱座標v分別是在其影象陣列中所在的列數與所在行數。(在opencv中u對應x,v對應y)

下面一張圖能更好地展示opencv中畫素座標系:

點(3,4)表示的是從原點起,向下數四行,向右數三列。相對位置都是以0為索引開始計算,即影象座標係先按寬,再按高進行索引,即(w,h)

這裡要注意at中(i,j)的順序表示的是第i行第j列,跟point(i,j)和rect(i,j)中表示第j行第i列是相反的。因此其訪問的結果其實是訪問image影象中的point(x2, x1)點,即與image.at(point(x2, x1))效果相同。

演示程式如下:

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

如一幅3通道的彩色影象image的第i行j列的b、g、r分量分別表示為:

image.at(i,j)[0];

image.at(i,j)[1];

image.at(i,j)[2];

ref:

OpenCV座標體系介紹以及畫素點at操作講解

雖然使用opencv已經有一段時間,但是一直沒有涉及單個畫素點的操作。今天在提取畫素點繪製水平以及數值軸直方圖時,總感覺直方圖提取反了,直到x,y座標交換才得出正確結果。出處 前言相信很多朋友在使用opencv的時候會遇到乙個小問題,且有時候對這樣的小問題沒有引起足夠的重視,或者通過表面想當然的去程...

OpenCV座標體系介紹以及畫素點at操作講解

雖然使用opencv已經有一段時間,但是一直沒有涉及單個畫素點的操作。今天在提取畫素點繪製水平以及數值軸直方圖時,總感覺直方圖提取反了,直到x,y座標交換才得出正確結果。找到這篇文章,座標系以及畫素點的提取作者介紹的很詳細,貼出來提醒自己的同時與大家共同學習。出處 前言 相信很多朋友在使用openc...

OpenCV座標系與row col的關係

座標體系中的零點座標為的左上角,x軸為影象矩形的上面那條水平線 y軸為影象矩形左邊的那條垂直線。該座標體系在諸如結構體mat,rect,point中都是適用的。雖然網上有學著說opencv中有些資料結構的座標原點是在的左下角,但是我暫時還沒碰到過 在使用image.at x1,x2 來訪問影象中點的...