一、开操作

代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("L:opencv_picture/11.png");
if (!src.data) {
printf("could not load image...\n");
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
char output_title[] = "morphology demo";
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
//getStructuringElement参数:1.形状矩形 2.形态学锚点尺寸 3.默认Point(-1, -1)锚点中心
morphologyEx(src, dst, CV_MOP_OPEN, kernel);
//morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel
imshow(output_title, dst);
waitKey(0);
return 0;
}
结果:

二、闭操作

代码入下:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
//1.
//src = imread("L:opencv_picture/11.png");
//2.
src = imread("L:opencv_picture/12.png");
if (!src.data) {
printf("could not load image...\n");
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
char output_title[] = "morphology demo";
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
//getStructuringElement参数:1.形状矩形 2.形态学锚点尺寸 3.默认Point(-1, -1)锚点中心
//1.开操作:
//morphologyEx(src, dst, CV_MOP_OPEN, kernel);
//morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel
//2.闭操作:
morphologyEx(src, dst, CV_MOP_CLOSE, kernel);
imshow(output_title, dst);
waitKey(0);
return 0;
}
结果:

三、形态学梯度

代码:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
//1.
//src = imread("L:opencv_picture/11.png");
//2.
//src = imread("L:opencv_picture/12.png");
//3.
src = imread("L:opencv_picture/13.jpg");
if (!src.data) {
printf("could not load image...\n");
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
char output_title[] = "morphology demo";
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
//getStructuringElement参数:1.形状矩形 2.形态学锚点尺寸 3.默认Point(-1, -1)锚点中心
//1.开操作:
//morphologyEx(src, dst, CV_MOP_OPEN, kernel);
//morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel
//2.闭操作:
//morphologyEx(src, dst, CV_MOP_CLOSE, kernel);
//3.形态学梯度:
morphologyEx(src, dst,CV_MOP_GRADIENT , kernel);
imshow(output_title, dst);
waitKey(0);
return 0;
}
结果:

四、顶帽

代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
//1.
//src = imread("L:opencv_picture/11.png");
//2.
//src = imread("L:opencv_picture/12.png");
//3.
//src = imread("L:opencv_picture/13.jpg");
//4.
src = imread("L:opencv_picture/11.png");
if (!src.data) {
printf("could not load image...\n");
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
char output_title[] = "morphology demo";
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
//getStructuringElement参数:1.形状矩形 2.形态学锚点尺寸 3.默认Point(-1, -1)锚点中心
//1.开操作:
//morphologyEx(src, dst, CV_MOP_OPEN, kernel);
//morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel
//2.闭操作:
//morphologyEx(src, dst, CV_MOP_CLOSE, kernel);
//3.形态学梯度:
//morphologyEx(src, dst,CV_MOP_GRADIENT , kernel);
//4.顶帽:
morphologyEx(src, dst,CV_MOP_TOPHAT , kernel);
imshow(output_title, dst);
waitKey(0);
return 0;
}
结果:

五、黑帽

代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
//1.
//src = imread("L:opencv_picture/11.png");
//2.
//src = imread("L:opencv_picture/12.png");
//3.
//src = imread("L:opencv_picture/13.jpg");
//4.
//src = imread("L:opencv_picture/11.png");
//5.
src = imread("L:opencv_picture/12.png");
if (!src.data) {
printf("could not load image...\n");
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
char output_title[] = "morphology demo";
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
//getStructuringElement参数:1.形状矩形 2.形态学锚点尺寸 3.默认Point(-1, -1)锚点中心
//1.开操作:
//morphologyEx(src, dst, CV_MOP_OPEN, kernel);
//morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel
//2.闭操作:
//morphologyEx(src, dst, CV_MOP_CLOSE, kernel);
//3.形态学梯度:
//morphologyEx(src, dst,CV_MOP_GRADIENT , kernel);
//4.顶帽:
//morphologyEx(src, dst,CV_MOP_TOPHAT , kernel);
//5.黑帽:
morphologyEx(src, dst,CV_MOP_BLACKHAT , kernel);
imshow(output_title, dst);
waitKey(0);
return 0;
}
原图: 闭操作图:

黑帽为两图之差:
