概念
膨脹操作是將圖像A與任意形狀的結(jié)構(gòu)元素B進(jìn)行卷積塔次,而結(jié)構(gòu)元素B擁有一個可定義的參考點(diǎn),我們稱之為錨點(diǎn)名秀,進(jìn)行膨脹操作時就是將結(jié)構(gòu)元素B劃過圖像A(也成為卷積)励负,并將B覆蓋區(qū)域的像素點(diǎn)的最小值賦給參考點(diǎn)指定的像素,這一操作會使圖像中的暗區(qū)域逐漸擴(kuò)展泰偿,因此我們稱它為腐蝕熄守。
效果圖對比
●源圖像
●處理后圖像
函數(shù)講解
●函數(shù)原型
○c++
void erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
○Android
void erode(Mat src, Mat dst, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)
●參數(shù)解釋
○src:源圖像Mat對象
○dst:目標(biāo)圖像Mat對象
○kernel:用于膨脹操作的結(jié)構(gòu)元素,如果取值為Mat(),那么默認(rèn)使用一個3 x 3 的方形結(jié)構(gòu)元素,可以使用getStructuringElement()來創(chuàng)建結(jié)構(gòu)元素
○anchor:參考點(diǎn)裕照,其默認(rèn)值為(-1,-1)說明位于kernel的中心位置攒发。
○borderType :邊緣類型,默認(rèn)為BORDER_CONSTANT晋南。
○borderValue :邊緣值惠猿,用它的默認(rèn)值即可。
函數(shù)使用
●c++中
#include<opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/Administrator/Desktop/wan.png");//引入源圖像
if (src.empty()) {
return -1;
}
imshow("src", src);//展示源圖像
Mat dst;
Mat kernel = getStructuringElement(MORPH_RECT,Size(3,3));//創(chuàng)建結(jié)構(gòu)元素大小為3*3
erode(src,dst,kernel);//腐蝕操作
imshow("dst", dst);//展示目標(biāo)圖像
waitKey(0);
return 0;
}
●Android中
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_beauty);//獲取源圖像Bitmap對象
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);//Bitmap轉(zhuǎn)換為Mat對象
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));//獲取結(jié)構(gòu)元素
Imgproc.erode(src,dst,kernel);//腐蝕操作
Utils.matToBitmap(dst,bitmap);//Mat轉(zhuǎn)換為Bitmap對象
imageView.setImageBitmap(bitmap);