1、簡介
所有的計算機視覺應用程序算法都涉及圖像處理,而圖像的本質就是有數值組成的矩陣,矩陣中的每個元素表示一個矩陣,如圖1所示。在OpenCV中使用了cv::Mat結構來操作圖像,對於灰度圖像(黑白圖片),像素是8位無符號數(數據類型unsigned char),0表示黑色,255表示白色。而對於彩色圖片,使用了三通道(OpenCV:BGR)構建像素值,即彩色圖片中每個像素都對應值三個數值。
2、實現
下面我們將使用下面的彩色圖片作為輸入對象,對圖像的像素進行操作。
包含以下內容:
- 訪問像素
- 用指針掃描圖像
- 用迭代器掃描圖像
- 編寫高效的圖像掃描循環
- 掃描圖像並訪問相鄰的圖像
- 實現簡單的圖像運算
- 圖像重映射
(1)訪問像素
圖像的本質就是一個由數值組成的矩陣。在opencv中使用cv::Mat結構來操作圖像。若要訪問矩陣中的每個獨立的元素,則需要指定它的行號和列好即可,返回的元素可以是單個像素,也可以是多通道的數值向量。
為了展示如何訪問像素值,我們在圖片中加入椒鹽噪聲(salt-and-pepper noise)特效說明。在這裡簡單介紹什麼是椒鹽噪聲,椒鹽噪聲就是隨機選擇一些像素,並把這些像素的顏色替換為黑色或者白色,在這裡我們設為白色。
1)首先,添加OpenCV庫以及C++的random庫
2)然後,編寫椒鹽噪聲函數
cv::Mat image表示輸入的圖像,n是噪聲的個數(修改像素的個數)
3)主函數
4)運行結果
cv::Mat類中包含多種方法,來訪問圖像的各種屬性; 利用公有成員cols和rows獲取圖像的列數和函數,利用cv::Mat的at(int y, int x)方法訪問元素, x是列號,y是行號。
感興趣的同學朋友們,歡迎點贊、收藏和轉發。受制於篇幅,後面有時間會分享用迭代器掃描圖像、編寫高效的圖像掃描循環、掃描圖像並訪問相鄰的圖像、實現簡單的圖像運算以及圖像重映射等內容。
閱讀更多 AI機器學習與數據挖掘 的文章