概念
利用morphologyEx這個(gè)函數(shù)可以方便的對(duì)圖像進(jìn)行一系列的膨脹腐蝕組合商模。
函數(shù)講解
●函數(shù)原型
○c++
void morphologyEx( InputArray src, OutputArray dst,
int op, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
○Android
void morphologyEx(Mat src, Mat dst, int op, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)
●參數(shù)解釋
○src:源圖像Mat對(duì)象
○dst:目標(biāo)圖像Mat對(duì)象
○op:操作的類(lèi)型批旺,通過(guò)源碼我們得知總共有以下幾種類(lèi)型:
enum MorphTypes{
MORPH_ERODE = 0, //腐蝕
MORPH_DILATE = 1, //膨脹
MORPH_OPEN = 2, //開(kāi)操作
MORPH_CLOSE = 3, //閉操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //頂帽操作
MORPH_BLACKHAT = 6, //黑帽操作
MORPH_HITMISS = 7
};
○kernel:用于膨脹操作的結(jié)構(gòu)元素鲸阔,如果取值為Mat(),那么默認(rèn)使用一個(gè)3 x 3 的方形結(jié)構(gòu)元素寨典,可以使用getStructuringElement()來(lái)創(chuàng)建結(jié)構(gòu)元素
○anchor:參考點(diǎn)颓帝,其默認(rèn)值為(-1,-1)說(shuō)明位于kernel的中心位置锻煌。
○borderType :邊緣類(lèi)型翩隧,默認(rèn)為BORDER_CONSTANT樊展。
○borderValue :邊緣值,用它的默認(rèn)值即可堆生。
各種操作的效果
●MORPH_ERODE(腐蝕)
跟erode(腐蝕)函數(shù)效果一樣
●MORPH_DILATE(膨脹)
跟dilate(膨脹)函數(shù)效果一樣
●MORPH_OPEN(開(kāi))
其實(shí)內(nèi)部就是進(jìn)行了先腐蝕后膨脹的操作专缠。
●MORPH_CLOSE(閉)
其實(shí)內(nèi)部就是進(jìn)行了先膨脹后腐蝕的操作。
●MORPH_GRADIENT(梯度)
內(nèi)部是膨脹減去腐蝕
●MORPH_TOPHAT(頂帽)
●MORPH_BLACKHAT(黑帽)
函數(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
morphologyEx(src, dst,MORPH_OPEN, kernel);//開(kāi)操作
imshow("dst", dst);//展示目標(biāo)圖像
waitKey(0);
return 0;
}
●Android中
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_beauty);//獲取源圖像Bitmap對(duì)象
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);//Bitmap轉(zhuǎn)換為Mat對(duì)象
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));//獲取結(jié)構(gòu)元素
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_OPEN,kernel);//開(kāi)操作
Utils.matToBitmap(dst,bitmap);//Mat轉(zhuǎn)換為Bitmap對(duì)象
imageView.setImageBitmap(bitmap);