OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作
生活随笔
收集整理的這篇文章主要介紹了
OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
1.數字圖像處理中的掩膜的概念是起源于于PCB制版的過程,在半導體制造中,許多芯片工藝步驟采用光刻技術,用于這些步驟的圖形“底片”稱為掩膜(也稱作“掩模”),其作用是:在硅片上選定的區域中對一個不透明的圖形模板遮蓋,繼而下面的腐蝕或擴散將只影響選定的區域以外的區域。
2.圖像掩膜與其類似,用選定的圖像、圖形或物體,對處理的圖像(全部或局部)進行遮擋,來控制圖像處理的區域或處理過程。
光學圖像處理中,掩模可以是膠片、濾光片等。數字圖像處理中,掩模為二維矩陣數組,有時也用多值圖像。
3.數字圖像處理中,圖像掩模主要用于:
①提取感興趣區,用預先制作的感興趣區掩模與待處理圖像相乘,得到感興趣區圖像,感興趣區內圖像值保持不變,而區外圖像值都為0。
②屏蔽作用,用掩模對圖像上某些區域作屏蔽,使其不參加處理或不參加處理參數的計算,或僅對屏蔽區作處理或統計。
③結構特征提取,用相似性變量或圖像匹配方法檢測和提取圖像中與掩模相似的結構特征。
④特殊形狀圖像的制作。
4.掩膜是一種圖像濾鏡的模板,實用掩膜經常處理的是遙感圖像。當提取道路或者河流,或者房屋時,通過一個n*n的矩陣來對圖像進行像素過濾,然后將我們需要的地物或者標志突出顯示出來。這個矩陣就是一種掩膜。
代碼演示
1.下面是用掩膜來增加圖像對比度的函數,可以看它實現的公式:
**I(i,j)=5?I(i,j)?[I(i?1,j)+I(i+1,j)+I(i,j?1)+I(i,j+1)]** void mask(Mat &input, Mat &dest) {//生成一個和源圖像大小相等類型相同的全0矩陣dest = Mat::zeros(input.size(), input.type());//獲取圖像的列數int cols = (input.cols - 1)*input.channels();//獲取圖像的行數int rows = input.rows;//獲取圖像通道數int channel = input.channels();//遍歷行數for (int row = 1; row < rows - 1; row++) {//上一行uchar* previous = input.ptr<uchar>(row - 1);//當前行uchar* current = input.ptr<uchar>(row);//下一行uchar* next = input.ptr<uchar>(row + 1);//輸出圖像的行uchar* output = dest.ptr<uchar>(row);//開始對每個像素做掩膜操作for (int col = channel; col < cols; col++){output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - channel] + current[col + channel] + previous[col] + next[col]));}} }測試結果:
總結
以上是生活随笔為你收集整理的OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV图像处理使用笔记(一)——使
- 下一篇: OpenCV图像处理使用笔记(五)——图