基于形态学运算的腐蚀,膨胀,开运算,闭运算
2015-05-30 17:16
302 查看
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(){
Mat image = imread("binary.bmp");
imshow("Image",image);
////腐蚀图像 默认3*3
//Mat eroded;
//erode(image,eroded,Mat());
//imshow("Erode Image",eroded);
////膨胀图像
//Mat dilated;
//dilate(image, dilated, Mat());
//imshow("Dilate Image",dilated);
////以7*7大小的数据结构进行腐蚀
//Mat eroded2;
//Mat element(7, 7, CV_8U, Scalar(1));
//erode(image, eroded2, element);
//imshow("element Image",eroded2);
//// 以7*7大小的数据结构进行腐蚀3次
//Mat eroded3;
//Mat element3(7, 7, CV_8U, Scalar(1));
//erode(image,eroded3,element3,Point(-1,-1),3);
//imshow("eroded3",eroded3);
//对图片进行闭运算
Mat element5(5, 5, CV_8U, Scalar(1));
Mat closed;
morphologyEx(image, closed, MORPH_CLOSE, element5);
imshow("closed", closed);
//对图片进行开运算
Mat opened;
morphologyEx(image,opened,MORPH_OPEN,element5);
imshow("opened",opened);
//相继进行开运算和闭运算
Mat opencvandclose;
morphologyEx(image, opened, MORPH_OPEN, element5);
morphologyEx(opened, opencvandclose, MORPH_CLOSE, element5);
imshow("opencvandclose", opencvandclose);
//相继进行闭运算和开运算
Mat closeandopen;
morphologyEx(image, closed, MORPH_CLOSE, element5);
morphologyEx(closed, closeandopen, MORPH_OPEN, element5);
imshow("closeandopen", closeandopen);
//腐蚀图像 默认3*3
Mat eroded;
erode(image, eroded, element5);
imshow("Erode Image",eroded);
//先腐蚀在膨胀
Mat erodedanddilated;
Mat erodedanddilated2;
erode(image, erodedanddilated, element5);
dilate(erodedanddilated, erodedanddilated2, element5);
imshow("erodedanddilated", erodedanddilated2);
//先膨胀再腐蚀
Mat dilateanderode;
Mat dilateanderode2;
dilate(image, dilateanderode, element5);
erode(dilateanderode, dilateanderode2,element5);
imshow("dilateanderode", dilateanderode2);
//膨胀图像
Mat dilated;
dilate(image, dilated, element5);
imshow("Dilate Image",dilated);
waitKey(0);
}
erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1),int iterations=1, int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue() )
iterations:腐蚀次数
我们的形态学滤波都作用在二值图像或者灰度图像上
闭运算:对图像进行先膨胀,再腐蚀
开运算:对图像先腐蚀,再膨胀
例子2:
加了滚动条,参考: http://blog.csdn.net/poem_qianmo/article/details/23710721 浅墨的博客
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(){
Mat image = imread("binary.bmp");
imshow("Image",image);
////腐蚀图像 默认3*3
//Mat eroded;
//erode(image,eroded,Mat());
//imshow("Erode Image",eroded);
////膨胀图像
//Mat dilated;
//dilate(image, dilated, Mat());
//imshow("Dilate Image",dilated);
////以7*7大小的数据结构进行腐蚀
//Mat eroded2;
//Mat element(7, 7, CV_8U, Scalar(1));
//erode(image, eroded2, element);
//imshow("element Image",eroded2);
//// 以7*7大小的数据结构进行腐蚀3次
//Mat eroded3;
//Mat element3(7, 7, CV_8U, Scalar(1));
//erode(image,eroded3,element3,Point(-1,-1),3);
//imshow("eroded3",eroded3);
//对图片进行闭运算
Mat element5(5, 5, CV_8U, Scalar(1));
Mat closed;
morphologyEx(image, closed, MORPH_CLOSE, element5);
imshow("closed", closed);
//对图片进行开运算
Mat opened;
morphologyEx(image,opened,MORPH_OPEN,element5);
imshow("opened",opened);
//相继进行开运算和闭运算
Mat opencvandclose;
morphologyEx(image, opened, MORPH_OPEN, element5);
morphologyEx(opened, opencvandclose, MORPH_CLOSE, element5);
imshow("opencvandclose", opencvandclose);
//相继进行闭运算和开运算
Mat closeandopen;
morphologyEx(image, closed, MORPH_CLOSE, element5);
morphologyEx(closed, closeandopen, MORPH_OPEN, element5);
imshow("closeandopen", closeandopen);
//腐蚀图像 默认3*3
Mat eroded;
erode(image, eroded, element5);
imshow("Erode Image",eroded);
//先腐蚀在膨胀
Mat erodedanddilated;
Mat erodedanddilated2;
erode(image, erodedanddilated, element5);
dilate(erodedanddilated, erodedanddilated2, element5);
imshow("erodedanddilated", erodedanddilated2);
//先膨胀再腐蚀
Mat dilateanderode;
Mat dilateanderode2;
dilate(image, dilateanderode, element5);
erode(dilateanderode, dilateanderode2,element5);
imshow("dilateanderode", dilateanderode2);
//膨胀图像
Mat dilated;
dilate(image, dilated, element5);
imshow("Dilate Image",dilated);
waitKey(0);
}
erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1),int iterations=1, int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue() )
iterations:腐蚀次数
我们的形态学滤波都作用在二值图像或者灰度图像上
闭运算:对图像进行先膨胀,再腐蚀
开运算:对图像先腐蚀,再膨胀
例子2:
加了滚动条,参考: http://blog.csdn.net/poem_qianmo/article/details/23710721 浅墨的博客
#include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace std; using namespace cv; Mat src, dst; int TrackbarNum = 0; int StructElementSize = 3; void process(); void on_TrackbarNumChange(int, void *); void on_ElementSizeChange(int,void *); int main(){ src = imread("1.jpg"); if (!src.data) cout << "oh no not find" << endl; imshow("image",src); namedWindow("效果图"); Mat element = getStructuringElement(MORPH_RECT, Size(2 * StructElementSize + 1, 2 * StructElementSize + 1), Point(StructElementSize, StructElementSize)); erode(src,dst,element); imshow("效果图",dst); createTrackbar("腐蚀/膨胀", "效果图",&TrackbarNum, 1, on_TrackbarNumChange); createTrackbar("内核值", "效果图", &StructElementSize, 21, on_ElementSizeChange); cout << "begin"<<endl << "按下‘q’时,退出……" << endl; while (char(waitKey(1)) != 'q'){} return 0; } void process(){ Mat element = getStructuringElement(MORPH_RECT, Size(2 * StructElementSize + 1, 2 * StructElementSize + 1), Point(StructElementSize, StructElementSize)); if (TrackbarNum == 0){ erode(src,dst,element); } else { dilate(src,dst,element); } imshow("效果图",dst); } void on_TrackbarNumChange(int, void *){ process(); } void on_ElementSizeChange(int, void *){ process(); }
相关文章推荐
- 【团队分享】刀锋铁骑:常见Android Native崩溃及错误原因
- linux学习笔记—别名与快捷键
- 【hdoj 1181】变形课
- ffmpeg处理RTMP流媒体的命令大全
- 图像卷积和滤波运算(高斯滤波模板)
- 统计函数耗费时间,简单的图像运算,定义感兴趣区域 第二章
- 理解电脑上的串口对应的端口号(com口)
- 设计模式1-工厂方法模式(Factory Method)
- common-logging
- 详说 Block Formatting Contexts (块级格式化上下文)
- Linux 的 Crontab 命令运用(转)
- Java的反射
- MySQL数据库索引的设计原则
- 回调函数
- 遍历图像像素点的方法
- 第一章 笔记
- visual studio dll生成与调用方法
- 你真的懂iOS的autorelease吗?
- Emacs 快速指南 - 原生中文手册
- MySQL数据库索引的设计原则