像素初探
本文由@星沉閣冰不語出品,轉載請注明作者和出處。
文章鏈接:http://blog.csdn.net/xingchenbingbuyu/article/details/50708765
安裝ImageWatch之后,對于圖片每一個點的像素值一目了然。由于之前對于像素點的操作老是出現各種問題,比如上次想要實現矩形圖片的對角線切割就是一直沒能成功。今天借助IamgeWatch正好探究下Mat數據結構中像素到底是怎么訪問的。
我用了一種比較直觀的方式來訪問像素。即利用at函數:
[cpp]?view plaincopy print?
分別提取(2,3)、(3,2)和Point(2,3)、Point(3,2)的像素值。同時分別提取了三通道的BGR值。
結果如下:
可以看到Point(3,2)和(2,3)的像素值相同,Point(2,3)和(3,2)的值相同。從右邊的ImageWatch可以看出Point(2,3)才是符合我們常規思維的坐標點。(其實點是(0,0))。
所以image.at<Vec3b>(Point(x,y)) =?image.at<Vec3b>(y,x) 。
繼續往下看:
等等!BGR三通道分別是1,A,k是什么鬼?說好的[ 49,65,107]呢?搜索下OpenCV的官方教程文檔,發現下面這句話:
發現Vec3b原來是uchar類型數據,上網找了個ASCII碼對照表一對比,果然【1,A,k】就對應著【49,65,107】。
但是如果像素值大于127的話,這種方式就不能輸出像素值了,考慮到這只喵星人身上白色部分的像素值大于127,于是提取(400,300)點的像素值,果然什么也沒有顯示出來。
把他們轉換成int型呢
[cpp]?view plaincopy print?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!
總結
- 上一篇: Python 的字符串内建函数
- 下一篇: cogs 1456. [UVa 1088