OpenCV图像腐蚀函数erode()的使用
OPenCV版本:4.4
IDE:VS2017
功能描述
通過一個特定的結(jié)構(gòu)元素腐蝕一個圖像。圖像腐蝕的過程類似于一個卷積的過程,源圖像矩陣A以及結(jié)構(gòu)元素B,B在A矩陣上依次移動,每個位置上B所覆蓋元素的最小值替換B的中心位置值(即錨點(diǎn)處),完成整個腐蝕的過程。
注意:所謂的腐蝕與膨脹的對象是針對圖像中的白色元素所說的。看成是圖像中的物體話會理解反。
算法通俗理解:腐蝕算法使二值圖像縮小一圈,刪除對象邊界的某些像素,其運(yùn)算過程就是使用用3X3的結(jié)構(gòu)元素,掃描二值圖像的每一個像素,用結(jié)構(gòu)元素與其覆蓋的二值圖像做“與”運(yùn)算,如果都為1,結(jié)構(gòu)圖像的該像素為1,否則為0。結(jié)果就是使二值圖像減小一圈。
函數(shù)使用一個指定的核元素去腐蝕源圖像,內(nèi)核有一個可定義的 錨點(diǎn),我們叫他內(nèi)核中心點(diǎn),腐蝕操作時,獲取內(nèi)核覆蓋區(qū)域最小像素值,并代替錨點(diǎn)的像素,最小值通過以下公式獲取:
dst(x,y)=min?(x′,y′):element(x′,y′)≠0src(x+x′,y+y′)\texttt{dst} (x,y) = \min _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y') dst(x,y)=(x′,y′):element(x′,y′)?=0min?src(x+x′,y+y′)
函數(shù)支持就地模式,腐蝕操作可以迭加使用多次,在多通道圖像的情況下,每個通道獨(dú)立處理。
函數(shù)原型
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );參數(shù)描述
-
參數(shù) src 輸入圖像;通道的數(shù)量可以是任意的,但是深度值應(yīng)該是以下之一:
CV_8U, CV_16U, CV_16S, CV_32F or CV_64F. -
參數(shù) dst 和源圖像同樣大小和類型的輸出圖像。
-
參數(shù) kernel 用于腐蝕的結(jié)構(gòu)元素;如果element=Mat(),是一個3 x 3的矩形結(jié)構(gòu)元素. Kernel 可以通過使用getStructuringElement來創(chuàng)建。
-
參數(shù) anchor 素中的錨點(diǎn)的位置,默認(rèn)是值(-1,-1),也就是說錨點(diǎn)在元素的中心位置。
-
參數(shù) iterations 腐蝕的迭代次數(shù)。
-
參數(shù) borderType像素外推方法。參見#BorderTypes, BORDER_WRAP不支持。
-
參數(shù) borderValue 固定邊緣的情況下的邊緣值。
參考 dilate, morphologyEx, getStructuringElement
源碼示例:
#include <iostream> #include <opencv2/opencv.hpp>int main() {cv::Mat image = cv::imread("D:\\OpenCVtest\\images\\juice.png");if (image.empty()){std::cout << "image read failed!" << std::endl;cv::waitKey(0);return 0;}cv::Mat imageDst;//自定義核cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(8, 8));cv::imshow("原圖", image);cv::erode(image, imageDst, element);cv::imshow("腐蝕", imageDst);cv::waitKey(0);return 0; }運(yùn)行結(jié)果:
可見果汁杯邊緣變粗,水果的顏色變深,邊緣變粗。
總結(jié)
以上是生活随笔為你收集整理的OpenCV图像腐蚀函数erode()的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OPenCV膨胀函数dilate()的使
- 下一篇: OpenCV形态学变换函数morphol