opencv遍歷畫素的方式

2021-08-25 17:17:13 字數 627 閱讀 8181

1.使用at(i,j)

mat類提供了乙個at的方法用於取得影象上的點,它是乙個模板函式,可以取到任何型別的影象上的點。

一般typename用uchar表示灰度,vec3b表示彩色圖。

2.使用指標來遍歷(更高效比第乙個)

通過image.ptr(i)取出第i行的指標

值得說明的是:程式中將三通道的資料轉換為1通道,在建立在每一行資料元素之間在記憶體裡是連續儲存的,每個畫素三通道畫素按順序儲存。也就是一幅影象資料最開始的三個值,是最左上角的那畫素的三個通道的值。

但是這種用法不能用在行與行之間,因為影象在opencv裡的儲存機制問題,行與行之間可能有空白單元。這些空白單元對影象來說是沒有意思的,只是為了在某些架構上能夠更有效率,比如intel mmx可以更有效的處理那種個數是4或8倍數的行。但是我們可以申明乙個連續的空間來儲存影象,這個話題引入下面最為高效的遍歷影象的機制。

上面已經提到過了,一般來說影象行與行之間往往儲存是不連續的,但是有些影象可以是連續的,mat提供了乙個檢測影象是否連續的函式iscontinuous()。當影象連通時,我們就可以把影象完全展開,看成是一行。

3.採用.data進行遍歷(更高效比第乙個)

img=image.data

2與3效率相近,都比1快5倍。

opencv遍歷畫素的方式

我們在實際應用中對影象進行的操作,往往並不是將影象作為乙個整體進行操作,而是對影象中的所有點或特殊點進行運算,所以遍歷影象就顯得很重要,如何高效的遍歷影象是乙個很值得 的問題。mat類提供了乙個at的方法用於取得影象上的點,它是乙個模板函式,可以取到任何型別的影象上的點。下面我們通過乙個影象處理中的...

OpenCV常用訪問畫素的幾種方式

1.直接用at訪問 2.使用mat 模板子類過載 訪問,需要提前知道影象型別 cv mat img image img j,i cv vec3b 注意1 此處的 j,i 並不是座標,是訪問的第j行第i列的畫素。注意2 使用at方法訪問較慢,宜用於隨機訪問,而非迴圈。得到第j行畫素首位址的指標 for...

關於opencv遍歷畫素速度的提高方案

1 二值化演算法經過測試後基本可以,但是在運動中會出現無法檢測特徵影象的地方,另外執行的速度還是不快。因為 中有兩個雙層巢狀的for迴圈,這是給遍歷影象用的。為了優化for迴圈遍歷畫素占用的時間,我的實驗過程如下 我在網上查詢到可以用opencv 的lut查表法來簡化遍歷畫素的時間,這個可以比指標快...