您的位置:首页 > 运维架构

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

2017-11-21 21:41 323 查看
开操作-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);

b876
return 0;
}


效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dst api opencv kernel 对象