OpenCV学习第十一篇:形态学操作

来源:互联网 发布:香水时代的淘宝店怎么 编辑:程序博客网 时间:2024/06/13 22:05

开操作-open——CV_MOP_OPEN
先腐蚀,后膨胀
可以去掉小的对象,假设对象是前景色,背景是黑色
这里写图片描述
相关api
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1))
morphologyEx(src, dst, CV_MOP_GRADIENT, kernel)

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv) {    Mat src, dst;    src = imread("F:/识图/形态学测试.jpg");    if (src.empty()) {        printf("could not image!");        return -1;    }    namedWindow("Input Image", CV_WINDOW_AUTOSIZE);    imshow("Input Image", src);    //获取结构元素    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));    morphologyEx(src, dst, CV_MOP_OPEN, kernel);    imshow("outout image", dst);    waitKey(0);    return 0;}

效果:
这里写图片描述

闭操作-close—CV_MOP_CLOSE
先膨胀,后腐蚀
可以填充小的洞,假设对象是前景色,背景是黑色

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv) {    Mat src, dst;    src = imread("F:/识图/形态学测试.jpg");    if (src.empty()) {        printf("could not image!");        return -1;    }    namedWindow("Input Image", CV_WINDOW_AUTOSIZE);    imshow("Input Image", src);    //获取结构元素    Mat kernel = getStructuringElement(MORPH_RECT, Size(21, 21), Point(-1, -1));    morphologyEx(src, dst, CV_MOP_CLOSE, kernel);    imshow("outout image", dst);    waitKey(0);    return 0;}

效果:
这里写图片描述

形态学梯度-Morphological Gradient—-CV_MOP_GRADIENT
膨胀后腐蚀
又称为基本梯度(内部梯度和方向梯度)

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv) {    Mat src, dst;    src = imread("F:/识图/形态学测试.jpg");    if (src.empty()) {        printf("could not image!");        return -1;    }    namedWindow("Input Image", CV_WINDOW_AUTOSIZE);    imshow("Input Image", src);    //获取结构元素    Mat kernel = getStructuringElement(MORPH_RECT, Size(21, 21), Point(-1, -1));    morphologyEx(src, dst, CV_MOP_GRADIENT, kernel);    imshow("outout image", dst);    waitKey(0);    return 0;}

效果:
这里写图片描述

顶帽-top hat—CV_MOP_TOPHAT
顶帽是原图像与开操作之间的差值图像

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv) {    Mat src, dst;    src = imread("F:/识图/形态学测试.jpg");    if (src.empty()) {        printf("could not image!");        return -1;    }    namedWindow("Input Image", CV_WINDOW_AUTOSIZE);    imshow("Input Image", src);    //获取结构元素    Mat kernel = getStructuringElement(MORPH_RECT, Size(21, 21), Point(-1, -1));    morphologyEx(src, dst, CV_MOP_TOPHAT, kernel);    imshow("outout image", dst);    waitKey(0);    return 0;}

效果:
这里写图片描述

黑帽-black hat——CV_MOP_BLACKHAT
黑帽是闭操作与源图像的差值图像

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv) {    Mat src, dst;    src = imread("F:/识图/形态学测试.jpg");    if (src.empty()) {        printf("could not image!");        return -1;    }    namedWindow("Input Image", CV_WINDOW_AUTOSIZE);    imshow("Input Image", src);    //获取结构元素    Mat kernel = getStructuringElement(MORPH_RECT, Size(21, 21), Point(-1, -1));    morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);    imshow("outout image", dst);    waitKey(0);    return 0;}

效果:
这里写图片描述