OpenCV計算機視覺編程(C++):操作像素

1、簡介

所有的計算機視覺應用程序算法都涉及圖像處理,而圖像的本質就是有數值組成的矩陣,矩陣中的每個元素表示一個矩陣,如圖1所示。在OpenCV中使用了cv::Mat結構來操作圖像,對於灰度圖像(黑白圖片),像素是8位無符號數(數據類型unsigned char),0表示黑色,255表示白色。而對於彩色圖片,使用了三通道(OpenCV:BGR)構建像素值,即彩色圖片中每個像素都對應值三個數值。

OpenCV計算機視覺編程(C++):操作像素

圖1 三通道356x536x3

2、實現

下面我們將使用下面的彩色圖片作為輸入對象,對圖像的像素進行操作。

OpenCV計算機視覺編程(C++):操作像素

圖2 356x536x3

包含以下內容:

  1. 訪問像素
  2. 用指針掃描圖像
  3. 用迭代器掃描圖像
  4. 編寫高效的圖像掃描循環
  5. 掃描圖像並訪問相鄰的圖像
  6. 實現簡單的圖像運算
  7. 圖像重映射



(1)訪問像素

圖像的本質就是一個由數值組成的矩陣。在opencv中使用cv::Mat結構來操作圖像。若要訪問矩陣中的每個獨立的元素,則需要指定它的行號和列好即可,返回的元素可以是單個像素,也可以是多通道的數值向量。

為了展示如何訪問像素值,我們在圖片中加入椒鹽噪聲(salt-and-pepper noise)特效說明。在這裡簡單介紹什麼是椒鹽噪聲,椒鹽噪聲就是隨機選擇一些像素,並把這些像素的顏色替換為黑色或者白色,在這裡我們設為白色。

1)首先,添加OpenCV庫以及C++的random庫

OpenCV計算機視覺編程(C++):操作像素

圖3 添加庫文件

2)然後,編寫椒鹽噪聲函數

cv::Mat image表示輸入的圖像,n是噪聲的個數(修改像素的個數)

OpenCV計算機視覺編程(C++):操作像素

圖4 椒鹽噪聲函數

3)主函數

OpenCV計算機視覺編程(C++):操作像素

圖5 主函數

4)運行結果

cv::Mat類中包含多種方法,來訪問圖像的各種屬性; 利用公有成員cols和rows獲取圖像的列數和函數,利用cv::Mat的at(int y, int x)方法訪問元素, x是列號,y是行號。

OpenCV計算機視覺編程(C++):操作像素

圖6 讀取圖片為三通道彩色

OpenCV計算機視覺編程(C++):操作像素

圖7 讀取圖片為灰度圖片

感興趣的同學朋友們,歡迎點贊、收藏和轉發。受制於篇幅,後面有時間會分享用迭代器掃描圖像、編寫高效的圖像掃描循環、掃描圖像並訪問相鄰的圖像、實現簡單的圖像運算以及圖像重映射等內容。


分享到:


相關文章: