形態學:開、閉、梯度、頂帽、黑帽
阿新 • • 發佈:2018-12-11
原理
下面的element指的是進行操作的核
- 開操作(opening):
作用:
- 平滑物體的輪廓
- 斷開較窄的交界處
- 消除細小的噪聲、突出物
- 閉操作(closing):
作用:
- 平滑物體的輪廓
- 彌合較窄的交界處,填補輪廓線的斷裂
- 消除細小的孔洞
- 形態學梯度(Morphological Gradient):
作用:提取物體輪廓
- 頂帽(top hat):
.
- 黑帽(black hat):
官方程式碼
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int morph_elem=0;
int morph_size=0;
int morph_operator=0;
int const max_operator=4;
int const max_elem=2;
int const max_kernel_size=21;
const char* window_name = "Morphlogy Transformation Demo";
void Morphlogy_Opertions(int , void*);
Mat src,dst;
int main(void)
{
src = cv::imread("../res/1.jpg");
if(src.empty())
{
cout << "load image failed" << endl;
return -1;
}
cv::namedWindow(window_name,cv::WINDOW_NORMAL);
//建立Trackbar
cv::createTrackbar("Operator:\n 0:Opening-1:Closing\n2:Gradient-3:Top hat\n4:Black hat",window_name,&morph_operator,max_operator,Morphlogy_Opertions);
cv::createTrackbar("Element:\n 0:Rect-1:Cross-2:Ellipse",window_name,&morph_elem,max_elem,Morphlogy_Opertions);
cv::createTrackbar("Kernel size:\n2n+1",window_name,&morph_size,max_kernel_size,Morphlogy_Opertions);
Morphlogy_Opertions(0,NULL);
waitKey(0);
return 0;
};
void Morphlogy_Opertions(int , void*)
{
int operations= morph_operator+2; //因為第一個是開操作,列舉是2
Mat element = cv::getStructuringElement(morph_elem,Size(2*morph_size+1,2*morph_size+1),Point(morph_size,morph_size));
cv::morphologyEx(src,dst,operations,element);
imshow(window_name,dst);
}
結果:
OpenCV API
此函式可以進行多種形態學操作:腐蝕、膨脹、開、等等
void cv::morphologyEx (
InputArray src,&emsp //原圖
OutputArray dst,&emsp //輸出圖
int op,&emsp // 進行的具體的形態學操作,列舉如下
InputArray kernel,&emsp //核(可以根據cv::getStructuringElement得到)
Point anchor = Point(-1,-1),&emsp //錨點(預設)
int iterations = 1,&emsp //進行此操作的次數(預設)
int borderType = BORDER_CONSTANT,&emsp //邊界的處理(預設)
const Scalar & borderValue = morphologyDefaultBorderValue() &emsp //邊界的常數值(預設)
)
列舉名 | 數值 | 操作 |
---|---|---|
MORPH_ERODE | 0 | 腐蝕 |
MORPH_DILATE | 1 | 膨脹 |
MORPH_OPEN | 2 | 開 |
MORPH_CLOSE | 3 | 閉 |
MORPH_GRADIENT | 4 | 形態梯度 |
MORPH_TOPHAT | 5 | 頂帽 |
MORPH_BLACKHAT | 6 | 黑帽 |
MORPH_HITMISS | 7 | 擊中、不擊中 |