公式:
原理上大概是對每個畫素點運用公式將其與其周圍的四個畫素點進行修改操作
imshow("change", img2);//顯示修改後的
waitkey();
}需要遍歷的列數和本身的列數可能是不一樣的,這涉及到通道數的問題。比如說,如果是單通道,那麼需要遍歷的列數=本身的列數,因為單通道每個畫素點只有乙個值來表示;但是如果是三通道的rgb,那麼需要遍歷的列數=3*本身的列數,因為三通道的每個畫素點都有三個值來表示。
在用公式的時候要用到offsetx數值,這裡即的通道數。因為每次進行的實際上是每個畫素點與周圍四個畫素點的對應數值上的操作。單通道倒沒什麼影響,因為它每個畫素點只有乙個數值表示;而三通道有三個數值,第乙個數值就應該跟周圍四個畫素點的第乙個數值進行操作,以此類推。
用於確保經修改後每個畫素點rgb數值在0~255之間
部分**
mat kernel = (mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);//定義乙個掩膜 這個是上面的**對應的掩膜
filter2d(img, img2, img.depth(), kernel);
namedwindow("change", cv_window_normal);
imshow("change", img2);
實現效果跟上面的**一樣。只是你定義了什麼樣的掩膜,他就會執行什麼樣的操作,然後出對應的效果。
img和img2是mat型別變數,是把img修改後的內容賦給img2(此時img本身沒有被改變)。
depth是的深度屬性,有32、24、8。如果不知道的話就用-1或者原圖.depth(),表示深度和原圖一致。
opencv 掩膜操作
saturate cast函式保證運算後全部歸一化在0 255之間,注意上面row,col的移動範圍是很有講究的,的四個邊緣行因為沒有完整的上下左右所以省略,然而在實際應用掩膜操作時候並不用到自己這麼複雜的寫 opencv中提供了乙個filter2d函式。mat kernel mat 3,3 0,1...
opencv矩陣掩膜操作
include include using namespace std using namespace cv intmain imshow 操作前 src double t gettickcount 定義掩膜矩陣 卷積核 掩膜可以自己定義,不同矩陣效果不同 0 1 0 1 5 1 掩膜可以自己定義,...
OpenCV學習 掩膜
影象掩膜,用選定的影象 圖形或物體,對處理的影象 全部或區域性 進行遮擋,來控制影象處理的區域或處理過程。掩膜是一種影象濾鏡的模板,實用掩膜經常處理的是遙感影象。當提取道路或者河流,或者房屋時,通過乙個n n的矩陣來對影象進行畫素過濾,然後將我們需要的地物或者標誌突出顯示出來。這個矩陣就是一種掩膜。...