對於opencv畫素的訪問,可以有很多種方法,不同的訪問方式有著不同的效率。
下面我們將用不同的訪問畫素的方法來對影象隨機加一些椒鹽雜訊。
void salt(mat &img, int n)
else if (img.channels() == 3)
}}
方法一是通過img.at實現訪問,灰度影象每個畫素是uchar型別,所以是img.at< uchar>(j, i)。而rgb影象有三個通道,每個通道的畫素也是uchar型別,因此是vec3b。
void salt2(mat &img, int n)
else if (img.channels() == 3)
}}
方法二用指標訪問畫素。如果是灰度影象,img.ptr < uchar>(i)得到的是i行第乙個畫素的位址。所以,(data + j)就可以獲取到i行j列的畫素了。
對於rgb影象,img.ptr< vec3b>(i)得到的也是i行第乙個畫素的位址,但要注意的是這個位址對應有三個值了。( (data + j))[0]就可以獲取行j列的畫素b通道的值了。
void salt3(mat &img, int div)
for (int j = 0; j < nl; j++)
}}
方法三做的事情就是把畫素rgb通道的值放在一起。當是連續的畫素時,即非邊界的畫素,乙個迴圈for (int j = 0; j < nc; j++)來訪問所有畫素的bgr值。
顯然,方法三具有最高的訪問效率。
OpenCV 畫素訪問
我說說我的理解 srcimage.at j,i 表示的是 j 行 i 列 的這個畫素 srcimage.at point j,i 表示的是 座標 j,i 的畫素12 為了 的圖方便說明 j 換成 x i 換成 y 也就是說 srcimage.at x,y 表示的是 x 行 y 列 的這個畫素 src...
OpenCV 操作畫素(訪問畫素值)
為構建計算機視覺應用程式,我們需要學會訪問影象的內容,有時也要修改或者建立影象。本章將講講如何操作影象的元素 即畫素 影象本質上就是由陣列組成的矩陣。opencv使用了cv mat結構來操作影象。矩陣中的每乙個元素表示乙個畫素。對灰度影象而言,畫素是8位無符號數 資料型別為unsigned char...
OpenCV之畫素訪問優化
優化基本原則 1.減少多層迴圈的使用 2.盡量使用位運算 基於以上原則,可將之前幾篇博文中介紹的color reduce演算法 改為 voidcolorreduce5 mat image,intn 6 for int j 0 j 執行效率測試對比 測試環境 影象 500 338pixel cpu p...