基本コンセプト
腐食
腐食は、 Aの内側の境界に沿って円を描くように歩くBの中心(アンカーポイント)として理解できます。腐食にも一部を強調表示し、領域以外の部分A <ハイライト画素Aの外側に置換されています、。
うねり
拡張は、 Aの外側の境界に沿って円を描くように歩くBの中心(アンカーポイント)として理解できます。拡張のためのハイライト部であり、領域以外の部分A <ハイライト画素Aの外側に置換されています、。
オープンオペレーション
最初のために腐蚀
動作し、膨胀
動作が得られます。我々は、小さなオブジェクトを除去する際に非常に有用に使用され、(オブジェクトが明るい前景の色が黒であると仮定して)、背景より明るい消去ノイズ。
クローズドオペレーション
闭运算
開放動作の逆の動作、特に、あるべき膨胀
次いで腐蚀
操作、バックグラウンドノイズより消去暗くするために使用されます。
形態学的勾配
拡張した画像から腐食した画像を差し引くと、画像のエッジを抽出できます。
トップハットアルゴリズム
元の画像とオープニング操作後の画像の差を使用して、明るい小さなターゲットの前景を抽出します。
ブラックハットアルゴリズム
元の画像と操作後の画像の差、およびハイライトされていない小さなターゲットの前景が取り出されます。
APIの紹介
膨張と腐食
//获取,卷积核
Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
//指定 卷积核形状 大小 锚点位置(-1为中心)
dilate(src, dst, structureElement, Point(-1, -1), 1);
// 源图 结果 卷积核 锚点 迭代次数
erode(src, dst, structureElement);
//默认 锚点为中心点 迭代次数为 1
その他の形態学的操作
//同样先获得,卷积核:
// MORPH_RECT 矩形 MORPH_CROSS 十字形 MORPH_ELLIPSE 椭圆形
Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
//调用morphologyEx
morphologyEx(src, dst, MORPH_BLACKHAT, structureElement);
// 原图,结果,运算类型 运算核
/*******************************************************************************
MORPH_CLOSE 闭
MORPH_OPEN 开
MORPH_GRADIENT 梯度
MORPH_TOPHAT 顶帽
MORPH_BLACKHAT 黑帽
MORPH_DILATE 膨胀
MORPH_ERODE 腐蚀
*********************************************************************************/
コードの練習
#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat src,dst;
int element_size = 3;
int max_size = 25;
char OUTPUT[] = "OUTPUT_WINDOS";
void CallBack_Demo(int, void*)
{
int s = element_size * 2 + 1;
Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
//膨胀与腐蚀
//dilate(src, dst, structureElement, Point(-1, -1), 1);
//erode(src, dst, structureElement);
//闭
//morphologyEx(src,dst,MORPH_CLOSE,structureElement);
//开
//morphologyEx(src, dst, MORPH_OPEN, structureElement);
//梯度
//morphologyEx(src, dst, MORPH_GRADIENT, structureElement);
//顶帽
//morphologyEx(src, dst,MORPH_TOPHAT , structureElement);
//黑帽
morphologyEx(src, dst, MORPH_BLACKHAT, structureElement);
imshow(OUTPUT, dst);
return;
}
int main(int argc, char* argv[])
{
//src = imread("src.jpg");
src = imread("1.PNG");
if (!src.data)
{
cout << "cannot open image" << endl;
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
imshow("input image",src);
namedWindow(OUTPUT,WINDOW_AUTOSIZE);
createTrackbar("Element Size:", OUTPUT, &element_size, max_size, CallBack_Demo);
CallBack_Demo(0, 0);
waitKey(0);
return 0;
}