图像处理——滤波、膨胀腐蚀
2014-04-03 17:11
113 查看
1.双边滤波
可以保留边缘。基于空间距离及亮度差值的滤波。可用在图像分割。
彩色图片中的亮度差值的计算是计算各颜色分量差值加权求和得到。
2.膨胀与腐蚀
膨胀:核B与图像A卷积,计算核B覆盖区域的最大值。可使高亮区域逐渐增长。
腐蚀:计算核B覆盖区域的最小值。可是高亮区域减小。
膨胀可以填补凹洞,找连通分支(一个大的区域可能被噪声分割,膨胀操作可以使这些部分连通在一起)。使亮的区域得到扩展和连接。
腐蚀可以消除图像中的“斑点”噪声,使亮度区域被隔离并且缩小。
3.更通用的形态学处理
开运算:先腐蚀后膨胀。去除小的明亮区域,并且剩余的明亮区域被隔绝,但其大小不变。
闭运算:先膨胀再腐蚀。消除低亮度点值的孤立点。
形态学梯度:膨胀减去腐蚀。留下完整的外围边缘。
礼帽:原图减去其开运算。突出局部亮度极大点。
黑帽:原图减去其闭运算。突出局部亮度极小点。
注意开辟一段内存存储多幅图片的方法
可以保留边缘。基于空间距离及亮度差值的滤波。可用在图像分割。
彩色图片中的亮度差值的计算是计算各颜色分量差值加权求和得到。
2.膨胀与腐蚀
膨胀:核B与图像A卷积,计算核B覆盖区域的最大值。可使高亮区域逐渐增长。
腐蚀:计算核B覆盖区域的最小值。可是高亮区域减小。
膨胀可以填补凹洞,找连通分支(一个大的区域可能被噪声分割,膨胀操作可以使这些部分连通在一起)。使亮的区域得到扩展和连接。
腐蚀可以消除图像中的“斑点”噪声,使亮度区域被隔离并且缩小。
3.更通用的形态学处理
开运算:先腐蚀后膨胀。去除小的明亮区域,并且剩余的明亮区域被隔绝,但其大小不变。
闭运算:先膨胀再腐蚀。消除低亮度点值的孤立点。
形态学梯度:膨胀减去腐蚀。留下完整的外围边缘。
礼帽:原图减去其开运算。突出局部亮度极大点。
黑帽:原图减去其闭运算。突出局部亮度极小点。
#include"cv.h" #include"highgui.h" #include<iostream> using namespace std; int main(int argc,char** argv) { IplImage* img_pre=cvLoadImage("C:\\Users\\dell\\Desktop\\test1.jpg",1); IplImage**imgs=(IplImage **)calloc(5,sizeof(IplImage*)); imgs[0]=img_pre; for(int i=0;i<4;i++) { IplImage* img=imgs[i]; imgs[i+1]=cvCreateImage(cvGetSize(img_pre),img_pre->depth,img_pre->nChannels); cvSmooth(imgs[i],imgs[i+1],CV_BILATERAL,3,0,50.0,5.0);//双边滤波,3为滤波器大小3*3,0为无效参数,10.0为颜色sigma,5.0为距离sigma } cvNamedWindow("img_pre",CV_WINDOW_AUTOSIZE); cvShowImage("img_pre",img_pre); cvNamedWindow("img_smooth1",CV_WINDOW_AUTOSIZE); cvShowImage("img_smooth1",imgs[1]); cvNamedWindow("img_smooth2",CV_WINDOW_AUTOSIZE); cvShowImage("img_smooth2",imgs[2]); cvNamedWindow("img_smooth3",CV_WINDOW_AUTOSIZE); cvShowImage("img_smooth3",imgs[3]); cvNamedWindow("img_smooth4",CV_WINDOW_AUTOSIZE); cvShowImage("img_smooth4",imgs[4]); cvWaitKey(0); cvReleaseImage(&img_pre); free(imgs);//释放 cvDestroyWindow("img_pre"); cvDestroyWindow("img_smooth1"); cvDestroyWindow("img_smooth2"); cvDestroyWindow("img_smooth3"); cvDestroyWindow("img_smooth4"); }
注意开辟一段内存存储多幅图片的方法
#include "highgui.h" #include<cv.h> int main() { IplImage* img1=cvLoadImage("C:\\Users\\dell\\Desktop\\img1.jpg"); IplImage* img2=cvLoadImage("C:\\Users\\dell\\Desktop\\img2.jpg"); IplImage* img1_gray=cvCreateImage(cvGetSize(img1),img1->depth,1); cvCvtColor(img1,img1_gray,CV_RGB2GRAY); IplImage* img2_gray=cvCreateImage(cvGetSize(img2),img2->depth,1); cvCvtColor(img2,img2_gray,CV_RGB2GRAY); IplImage* diff=cvCreateImage(cvGetSize(img1),img1->depth,1); cvAbsDiff(img1_gray,img2_gray,diff);//两张图片相减获得掩码 cvShowImage("diff",diff); cvWaitKey(0); IplImage* diff_thr=cvCreateImage(cvGetSize(img1),img1->depth,1); cvThreshold(diff,diff_thr,55,255,CV_THRESH_BINARY);//二值化去噪 cvNamedWindow("diff_thr",1); cvShowImage("diff_thr",diff_thr); cvWaitKey(0); cvMorphologyEx(diff_thr,diff_thr,NULL,NULL,CV_MOP_OPEN,1);//开操作去噪 cvNamedWindow("diff_thr_OPEN",1); cvShowImage("diff_thr_OPEN",diff_thr); cvWaitKey(0); }
相关文章推荐
- 图像处理中的形态学滤波:腐蚀与膨胀
- 【图像处理】腐蚀膨胀与开运行、闭运算
- OpenCV之十 形态学图像处理(一):膨胀与腐蚀
- 形态学图像处理-腐蚀和膨胀
- (数字图像处理)腐蚀/膨胀/开运算/闭运算
- opencv图像处理——形态学腐蚀膨胀练习示例代码
- 【数字图像处理】图像二值化,腐蚀膨胀,开闭运算,击中击不中变换
- 形态学图像处理——图像膨胀&图像腐蚀
- 形态学图像处理-腐蚀和膨胀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- OpenCV1.0图像处理形态学操作腐蚀Erode与膨胀Dilate
- 图像处理(六)灰度形态学腐蚀与膨胀
- 图像处理__腐蚀和膨胀_开运算_闭运算
- OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作
- 图像处理——灰度化、二值化、膨胀算法、腐蚀算法以及开运算和闭运算
- python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算
- 图像处理 形态学 (腐蚀 膨胀 开闭运算 连通分量....)
- Opencv对图像做腐蚀和膨胀处理的结果
- OpenCV图像处理形态学操作腐蚀Erode与膨胀Dilate
- 学习【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀----思维导图笔记