CV_IMAGE_ELEM参数赋值时注意的问题
轉自:http://hi.baidu.com/wangruiy01/blog/item/041ab03e8abd33c57d1e71a0.html
?
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)
不用改變順序
?
總之,當應用這個宏是如果老報錯,就試試換個順序,或者檢查訪問的地址是否越界
總結
以上是生活随笔為你收集整理的CV_IMAGE_ELEM参数赋值时注意的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 在vc6控制台程序中如何调用运行Imag
- 下一篇: 小波矩特征提取matlab代码
