|
开操作- open
闭操作- close
形态学梯度- Morphological Gradient
顶帽 – top hat
黑帽 – black hat

开操作- open
先腐蚀后膨胀
可以去掉小的对象,假设对象是前景色,背景是黑色
[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() )
○src:源图像Mat对象
○dst:目标图像Mat对象
○op:操作的类型,通过源码我们得知总共有以下几种类型:
○kernel:用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
○anchor:参考点,其默认值为(-1,-1)说明位于kernel的中心位置。
○borderType :边缘类型,默认为BORDER_CONSTANT。
○borderValue :边缘值,用它的默认值即可。
enum MorphTypes{
MORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
MORPH_HITMISS = 7
};
●MORPH_ERODE(腐蚀)
跟erode(腐蚀)函数效果一样
●MORPH_DILATE(膨胀)
跟dilate(膨胀)函数效果一样
●MORPH_OPEN(开)
其实内部就是进行了先腐蚀后膨胀的操作。
●MORPH_CLOSE(闭)
其实内部就是进行了先膨胀后腐蚀的操作。
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("111.png");
if (!src.data) {
printf("加载图片异常\n");
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
char outputimg[] = "输出窗口";
namedWindow(outputimg, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(15, 15), Point(-1, -1));
//getStructuringElement返回指定形状和尺寸的结构元素
morphologyEx(src,dst,CV_MOP_OPEN,kernel);
//开操作
imshow(outputimg, dst);
waitKey(0);
return 0;
}
    
闭操作-close:
先膨胀后腐蚀(bin2)
可以填充小的洞(fill hole),假设对象是前景色,背景是黑色
[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() )
○src:源图像Mat对象
○dst:目标图像Mat对象
○op:操作的类型,通过源码我们得知总共有以下几种类型:
○kernel:用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
○anchor:参考点,其默认值为(-1,-1)说明位于kernel的中心位置。
○borderType :边缘类型,默认为BORDER_CONSTANT。
○borderValue :边缘值,用它的默认值即可。
enum MorphTypes{
MORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
MORPH_HITMISS = 7
};
●MORPH_ERODE(腐蚀)
跟erode(腐蚀)函数效果一样
●MORPH_DILATE(膨胀)
跟dilate(膨胀)函数效果一样
●MORPH_OPEN(开)
其实内部就是进行了先腐蚀后膨胀的操作。
●MORPH_CLOSE(闭)
其实内部就是进行了先膨胀后腐蚀的操作。
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("2222.png");
if (!src.data) {
printf("加载图片异常\n");
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
char outputimg[] = "输出窗口";
namedWindow(outputimg, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(15, 15), Point(-1, -1));
//getStructuringElement返回指定形状和尺寸的结构元素
morphologyEx(src,dst,CV_MOP_CLOSE,kernel);
//闭操作
imshow(outputimg, dst);
waitKey(0);
return 0;
}
   
形态学梯度- Morphological Gradient
膨胀减去腐蚀
又称为基本梯度(其它还包括-内部梯度、方向梯度)
[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() )
○src:源图像Mat对象
○dst:目标图像Mat对象
○op:操作的类型,通过源码我们得知总共有以下几种类型:
○kernel:用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
○anchor:参考点,其默认值为(-1,-1)说明位于kernel的中心位置。
○borderType :边缘类型,默认为BORDER_CONSTANT。
○borderValue :边缘值,用它的默认值即可。
enum MorphTypes{
MORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
MORPH_HITMISS = 7
};
●MORPH_ERODE(腐蚀)
跟erode(腐蚀)函数效果一样
●MORPH_DILATE(膨胀)
跟dilate(膨胀)函数效果一样
●MORPH_OPEN(开)
其实内部就是进行了先腐蚀后膨胀的操作。
●MORPH_CLOSE(闭)
其实内部就是进行了先膨胀后腐蚀的操作。
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("ccc.jpg");
if (!src.data) {
printf("加载图片异常\n");
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
char outputimg[] = "输出窗口";
namedWindow(outputimg, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
//getStructuringElement返回指定形状和尺寸的结构元素
morphologyEx(src,dst,CV_MOP_GRADIENT,kernel);
//梯度操作
imshow(outputimg, dst);
waitKey(0);
return 0;
}
 顶帽 – top hat
顶帽 是原图像与开操作之间的差值图像
[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() )
○src:源图像Mat对象
○dst:目标图像Mat对象
○op:操作的类型,通过源码我们得知总共有以下几种类型:
○kernel:用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
○anchor:参考点,其默认值为(-1,-1)说明位于kernel的中心位置。
○borderType :边缘类型,默认为BORDER_CONSTANT。
○borderValue :边缘值,用它的默认值即可。
enum MorphTypes{
MORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
MORPH_HITMISS = 7
};
●MORPH_ERODE(腐蚀)
跟erode(腐蚀)函数效果一样
●MORPH_DILATE(膨胀)
跟dilate(膨胀)函数效果一样
●MORPH_OPEN(开)
其实内部就是进行了先腐蚀后膨胀的操作。
●MORPH_CLOSE(闭)
其实内部就是进行了先膨胀后腐蚀的操作。
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("111.png");
if (!src.data) {
printf("加载图片异常\n");
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
char outputimg[] = "输出窗口";
namedWindow(outputimg, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(15, 15), Point(-1, -1));
//getStructuringElement返回指定形状和尺寸的结构元素
morphologyEx(src,dst, MORPH_TOPHAT,kernel);
//顶帽操作
imshow(outputimg, dst);
waitKey(0);
return 0;
}

黑帽
黑帽是闭操作图像与源图像的差值图像[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() )
○src:源图像Mat对象
○dst:目标图像Mat对象
○op:操作的类型,通过源码我们得知总共有以下几种类型:
○kernel:用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
○anchor:参考点,其默认值为(-1,-1)说明位于kernel的中心位置。
○borderType :边缘类型,默认为BORDER_CONSTANT。
○borderValue :边缘值,用它的默认值即可。
enum MorphTypes{
MORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
MORPH_HITMISS = 7
};
●MORPH_ERODE(腐蚀)
跟erode(腐蚀)函数效果一样
●MORPH_DILATE(膨胀)
跟dilate(膨胀)函数效果一样
●MORPH_OPEN(开)
其实内部就是进行了先腐蚀后膨胀的操作。
●MORPH_CLOSE(闭)
其实内部就是进行了先膨胀后腐蚀的操作。
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("2222.png");
if (!src.data) {
printf("加载图片异常\n");
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
char outputimg[] = "输出窗口";
namedWindow(outputimg, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(15, 15), Point(-1, -1));
//getStructuringElement返回指定形状和尺寸的结构元素
morphologyEx(src,dst, MORPH_BLACKHAT,kernel);
//黑帽操作
imshow(outputimg, dst);
waitKey(0);
return 0;
}
|
|