cvMorphologyEx 形态学操作:开闭运算,形态学梯度,礼帽和黑帽

1.开运算:CV_MOP_OPEN,先腐蚀(cvErode)再膨胀(cvDilate),去除亮点,可以将做了阀值化细胞图像的细胞分开

2.闭运算:CV_MOP_CLOSE,先膨胀(cvDilate)再cvErode,去除暗点

3.形态学梯度:cvDilate-cvErode,用于求边界

4.礼帽:src-开运算,突出亮点

5.黑帽:闭运算-src,突出暗点

程序:

代码:

#include "cv.h"

#include "cxcore.h"

#include "highgui.h"

#include <iostream>

int morphology(int argc,char** argv)

{

IplImage* src=cvLoadImage("e:\\picture\\123.bmp",0);   //不一定要是黑白的

IplImage* dst1=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

IplImage* dst2=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

IplImage* dst3=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

IplImage* dst4=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

IplImage* dst5=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

IplImage* temp=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

cvZero(dst1);

cvZero(dst2);

cvZero(dst3);

cvZero(dst4);

cvZero(dst5);

cvZero(temp);

cvNamedWindow("src");

cvNamedWindow("open");

cvNamedWindow("close");

cvNamedWindow("gradient");

cvNamedWindow("tophat");

cvNamedWindow("blackhat");

int value[]={1,1,1,

1,1,1,

1,1,1

};

IplConvKernel* kernel=cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_CUSTOM,value); //构建3*3的核

cvMorphologyEx(src,dst1,NULL,kernel,CV_MOP_OPEN,1); //开运算

cvMorphologyEx(src,dst2,NULL,kernel,CV_MOP_CLOSE,1); //闭运算

cvMorphologyEx(src,dst3,NULL,kernel,CV_MOP_GRADIENT,1);//形态学梯度

cvMorphologyEx(src,dst4,temp,kernel,CV_MOP_TOPHAT,1); //礼帽

cvMorphologyEx(src,dst5,temp,kernel,CV_MOP_BLACKHAT,1); //黑帽

cvShowImage("src",src);

cvShowImage("open",dst1);

cvShowImage("close",dst2);

cvShowImage("gradient",dst3);

cvShowImage("tophat",dst4);

cvShowImage("blackhat",dst5);

cvWaitKey(0);

cvDestroyWindow("src");

cvDestroyWindow("open");

cvDestroyWindow("close");

cvDestroyWindow("gradient");

cvDestroyWindow("tophat");

cvDestroyWindow("blackhat");

cvReleaseImage(&src);

cvReleaseImage(&dst1);

cvReleaseImage(&dst2);

cvReleaseImage(&dst3);

cvReleaseImage(&dst4);

cvReleaseImage(&dst5);

cvReleaseImage(&temp);

return 0;

}

cvMorphologyEx 形态学操作:开闭运算,形态学梯度,礼帽和黑帽,布布扣,bubuko.com

时间: 2024-12-18 07:03:07

cvMorphologyEx 形态学操作:开闭运算,形态学梯度,礼帽和黑帽的相关文章

Opencv3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

19      腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RECT,交叉形MORPH_CROSS,椭圆形MORPH_ELLIPSE.Matlab中会有更多一点的模板. 例如: Mat element = getStructuringElement(MORPH_RECT,Size(15,15)); erode(srcImage,dstImage,

腐蚀膨胀,开闭运算,形态学梯度,顶帽,黑帽

膨胀dilate void dilate(InputArray src,OutputArray dst,InputArray kernel,Point anchor=Point(-1,-1),int iterations=1,int borderType=BORDER_CONSTANT,const Scalar&borderValue=morphologyDefaultBorderValue()); 一般第三个参数用getStructuringElement函数配合使用:int g_nStruc

机器学习进阶-图像形态学变化-礼帽与黑帽 1.cv2.TOPHAT(礼帽-原始图片-开运算后图片) 2.cv2.BLACKHAT(黑帽 闭运算-原始图片)

1.op = cv2.TOPHAT  礼帽:原始图片-开运算后的图片 2. op=cv2.BLACKHAT 黑帽: 闭运算后的图片-原始图片 礼帽:表示的是原始图像-开运算(先腐蚀再膨胀)以后的图像 黑帽:表示的是闭运算(先膨胀再腐蚀)后的图像 - 原始图像 代码: 第一步:读取图片 第二步:使用cv2.MOPRH_TOPHAT获得礼帽图片 第三步:使用cv2.MOPRH_BLACKHAT获得黑帽图片 import cv2 import numpy as np # 第一步读入当前图片 img =

OpenCV探索之路(四):膨胀、腐蚀、开闭运算

腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域. 膨胀 膨胀就是求局部最大值的操作,从图像直观看来,就是将图像光亮部分放大,黑暗部分缩小. #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespa

学习 opencv---(10)形态学图像处理(2):开运算,闭运算,形态学梯度,顶帽,黒帽合辑

上篇文章中,我们重点了解了腐蚀和膨胀这两种最基本的形态学操作,而运用这两个基本操作,我们可以实现更高级的形态学变换. 所以,本文的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开闭运算.形态学梯度."顶帽"."黑帽"等等. 第二件事,是浅墨想跟大家做一个关于OpenCV系列文章的书写内容和风格的思想汇报. 是这样的,浅墨发现最近几期写出来的文章有些偏离自己开始开这个专栏的最初的愿望--原理和概念部分占的

形态学滤波(2):开运算、闭运算、形态学梯度、顶帽、黑帽

一.开运算 开运算,就是先腐蚀后膨胀的过程 数学表达式: dst = open(src,element) = dilate(erode(src, element)) 开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积. 二.闭运算 闭运算,就是先膨胀后腐蚀的过程 数学表达式: dst = open(src,element) = erode(dilate(src, element)) 闭运算可以用来排除小型黑洞(黑色区域) 三.形态学梯度 形态学梯度,就是

形态学滤波:(1)腐蚀与膨胀 (2)开运算,闭运算,形态学梯度,顶帽,黑帽

一.形态学概述 图像处理中的形态学一般指的是数学形态学. 数学形态学是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论.其基本运算包括:二值腐蚀和膨胀,二值开闭运算,骨架抽取,极限腐蚀,击中击不中变换,形态学梯度,top-hat变换,颗粒分析,流域变换,灰值腐蚀和膨胀,灰值开闭运算,灰值形态学梯度等. 简单来讲,形态学操作就是基于形状的一系列图像处理操作. 二.形态学滤波 (1)腐蚀与膨胀 膨胀和腐蚀能实现多种多样的功能,主要如下: 消除噪声: 分割(isolate)

OPENCV形态学操作1

形态学操作是指基于形状的一系列图像处理操作,包括膨胀,腐蚀,二值化,开运算,闭运算,顶帽算法,黑帽算法,形态学梯度等,最基本的形态学操作就是膨胀和腐蚀. 一.膨胀 首先需要明确一个概念,膨胀和腐蚀都是针对于图像中较亮的区域而言的,膨胀就是亮的区域变多了,而腐蚀就是暗的区域变多了. 膨胀的功能主要有消除噪声,分割出独立的图像元素,在图像操作的时候,有时候需要对图像中的某些形状进行检测,而这些形状相互连接在一起,不好分开检测,膨胀就能切开这些形状(很小的连接位置),或者图像中有很小块的黑斑,或许是相

图像形态学操作

形态学-腐蚀操作 img = cv2.imread('dige.png') cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() kernel = np.ones((3,3),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1) cv2.imshow('erosion', erosion) cv2.waitKey(0) cv2.destroyAllWindows()