opencv中CV_IMAGE_ELEM的用法讀取每個像素


可以使用OpenCV定義的宏來提取象素值
假設灰度圖像image,存取其i行j列的象素可以這樣:CV_IMAGE_ELEM(image, uchar,y, x)
如果是彩色圖像就是
CV_IMAGE_ELEM(image, uchar,y, 3*x)
CV_IMAGE_ELEM(image, uchar,y, 3*x+1)
CV_IMAGE_ELEM(image, uchar,y, 3*x+2)

 

CV_IMAGE_ELEM是一個宏,

#define CV_IMAGE_ELEM( image, elemtype, row, col ) \
(((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])

#define CV_MAT_ELEM( mat, elemtype, row, col ) \
(*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))

呵呵,我一直把它當一個函數用,其實本質也沒有什么區別的

但要想正確的得到圖像的坐標為(x,y)點的像素值,是應該這樣寫CV_IMAGE_ELEM(Image, uchar, y, x)

要注意像素點的坐標xy和行列值的順序是相反的(可以仔細思考為什么)

我剛開始一直寫成CV_IMAGE_ELEM(Image, uchar, x, y),結果有時候就造成了訪問image越界,從而報錯,花了好長時間才搗鼓出來,

不過將IMAGE的數據按照原來的樣子復制到mat中可以這么寫:
CV_IMAGE_ELEM(pImage, uchar, i, j) = CV_MAT_ELEM(*mat, uchar, i, j)

不用改變順序

總之,當應用這個宏是如果老報錯,就試試換個順序,或者檢查訪問的地址是否越界


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM