形态学对象的提取与屏蔽 (开操作和闭操作)
一、开操作
代码如下:
#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; }
原图: 闭操作图:
黑帽为两图之差: