精华内容
下载资源
问答
  • 知识点: 1.闭运算对图像先膨胀,再腐蚀 2.开运算对图像先腐蚀,再膨胀

    知识点:
    1.闭运算:对图像先膨胀,再腐蚀。 白色前景物体中的小洞被填充;将误分割成碎片的物体重新连接
    2.开运算:对图像先腐蚀,再膨胀 。 移除场景中比较小的物体;图像早点引起的(Blob)
    以上都在视频序列中很有帮助,若将二值图像相继进行闭、开运算,获得的图像只显示场景中的主要物体。若有限处理噪点可先进行开运算再闭运算,但可能去除一些分散的物体。
    3.

    void morphologyEx( InputArray src, OutputArray dst, 
    int op, InputArray kernel, 
    Point anchor = Point(-1,-1), int iterations = 1, 
    int borderType = BORDER_CONSTANT, 
    const Scalar& borderValue = morphologyDefaultBorderValue() ); 

    第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像位深应该为以下五种之一:CV_8U, CV_16U, CV_16S, CV_32F 或CV_64F。
    第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
    第三个参数,int类型的op,表示形态学运算的类型,可以是如下之一的标识符:
    MORPH_OPEN – 开运算(Opening operation)
    MORPH_CLOSE – 闭运算(Closing operation)
    MORPH_GRADIENT - 形态学梯度(Morphological gradient)
    MORPH_TOPHAT - “顶帽”(“Top hat”)
    MORPH_BLACKHAT - “黑帽”(“Black hat“)
    第四个参数,InputArray类型的kernel,形态学运算的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。关于getStructuringElement我们上篇文章中讲过了,这里为了大家参阅方便,再写一遍:
    其中,getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一 :
    矩形: MORPH_RECT
    交叉形 : MORPH_CROSS
    椭圆形 : MORPH_ELLIPSE
    而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。
    我们一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1, -1),表示锚点位于中心。且需要注意,十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响了形态学运算结果的偏移。
    第五个参数,Point类型的anchor,锚的位置,其有默认值( - 1, - 1),表示锚位于中心。
    第六个参数,int类型的iterations,迭代使用函数的次数,默认值为1。
    第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_ CONSTANT。
    第八个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般我们不用去管他。需要用到它时,可以看官方文档中的createMorphologyFilter()函数得到更详细的解释

    main:

    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    cv::Mat resrve(cv::Mat src);//二值化图像取反
    
    int main()
    {
        // Read input image
        cv::Mat image = cv::imread("D:/1.jpg", 0);
        if (!image.data)
            return 0;
    
        // Display the image
        cv::namedWindow("Image");
        cv::imshow("Image", image);
    
        //二值化
        cv::Mat thresholded, result;
        cv::threshold(image, thresholded, 110, 255, cv::THRESH_BINARY);
        cv::namedWindow("thresholded");
        cv::imshow("thresholded", thresholded);
    
        ///图片的补(图像求反)
        cv::Mat image2;
        image2 = resrve(thresholded);
        cv::namedWindow("resrved");
        cv::imshow("resrved", image2);
    
        //闭运算
        cv::Mat elements5(5, 5, CV_8U, cv::Scalar(1));
        cv::Mat closed;
        cv::morphologyEx(image2, closed, cv::MORPH_CLOSE, elements5);
    
        cv::namedWindow(" Closed Image");
        cv::imshow(" Closed Image", closed);
    
        //闭运算
        /*// Dilate the image膨胀图像
        cv::Mat dilated;
        cv::dilate(image2, dilated, cv::Mat());
    
        // Erode the image腐蚀图像
        cv::Mat result1;
        cv::erode(dilated, result1, cv::Mat());*/
    
        // Display the eroded image
        cv::namedWindow("Closed Image2");
        cv::imshow("Closed Image2", result1);
        cv::waitKey(0);
        return 0;
    }
    展开全文
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解...本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算图像运算和梯度运算,基础性知识希望您有所帮助,如果有不足之处,还请海涵~

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

    数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。

    本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算、图像闭运算和梯度运算,基础性知识希望对您有所帮助。

    • 1.图像开运算
    • 2.图像闭运算
    • 3.图像梯度运算

    PS:文章参考自己以前系列图像处理文章及OpenCV库函数,同时部分参考网易云lilizong老师的视频,推荐大家去学习。同时,本篇文章涉及到《计算机图形学》基础知识,请大家下来补充。

    该系列在github所有源代码:

    PS:请求帮忙点个Star,哈哈,第一次使用Github,以后会分享更多代码,一起加油。

    同时推荐作者的C++图像系列知识:

    前文参考:

    PSS:2019年1~2月作者参加了CSDN2018年博客评选,希望您能投出宝贵的一票。我是59号,Eastmount,杨秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

    五年来写了314篇博客,12个专栏,是真的热爱分享,热爱CSDN这个平台,也想帮助更多的人,专栏包括Python、数据挖掘、网络爬虫、图像处理、C#、Android等。现在也当了两年老师,更是觉得有义务教好每一个学生,让贵州学子好好写点代码,学点技术,"师者,传到授业解惑也",提前祝大家新年快乐。2019我们携手共进,为爱而生。

    一. 图像开运算

    1.基本原理
    图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:

    开运算(img) = 膨胀( 腐蚀(img) )
    下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。

    https://blog.csdn.net/hanshanbuleng/article/details/80657148

    2.函数原型
    图像开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。其原型如下:
    dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

    参数dst表示处理的结果,src表示原图像,cv2.MORPH_OPEN表示开运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

    运行结果如下图所示:

    3.代码实现
    完整代码如下所示:

    #encoding:utf-8
    import cv2  
    import numpy as np  
    
    #读取图片
    src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((5,5), np.uint8)
    
    #图像开运算
    result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    输出结果如下图所示,可以看到噪声已经被去除了。

    但是结果result中仍然有部分噪声,如果想去除更彻底将卷积设置为10*10的。 kernel = np.ones((10,10), np.uint8) result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)


    二. 图像闭运算

    1.基本原理
    图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:

    闭运算(img) = 腐蚀( 膨胀(img) )
    下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。

    https://blog.csdn.net/hanshanbuleng/article/details/80657148

    2.函数原型
    图像闭运算主要使用的函数morphologyEx,其原型如下:
    dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

    参数dst表示处理的结果,src表示原图像, cv2.MORPH_CLOSE表示闭运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

    运行结果如下图所示:

    3.代码实现
    完整代码如下所示:

    #encoding:utf-8
    import cv2  
    import numpy as np  
    
    #读取图片
    src = cv2.imread('test03.png', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((10,10), np.uint8)
    
    #图像闭运算
    result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    输出结果如下图所示,可以看到中间的噪声去掉。



    三. 图像梯度运算

    1.基本原理
    图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。如下图所示:

    梯度运算(img) = 膨胀(img) - 腐蚀(img)

    2.函数原型
    图像梯度运算主要使用的函数morphologyEx,参数为cv2.MORPH_GRADIENT。其原型如下:
    dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

    参数dst表示处理的结果,src表示原图像, cv2.MORPH_GRADIENT表示梯度运算,kernel表示卷积核。5*5的卷积核可以采用函数 np.ones((5,5), np.uint8) 构建。
    运行结果如下图所示:

    3.代码实现
    完整代码如下所示:

    #encoding:utf-8
    import cv2  
    import numpy as np  
    
    #读取图片
    src = cv2.imread('test04.png', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((10,10), np.uint8)
    
    #图像闭运算
    result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    输出结果如下图所示,可以看到中间的噪声去掉。

    希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。最近经历的事情太多,有喜有悲,关闭了朋友圈,希望通过不断学习和写文章来忘记烦劳,将忧郁转换为动力,每周学习都记录下来,加油!!!
    (By:Eastmount 2018-11-02 中午12点 https://blog.csdn.net/Eastmount/)


    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    展开全文
  • 形态学滤波:灰度图像进行开运算与闭运算。一、c++示例代码//包含头文件 #include &lt;opencv2/opencv.hpp&gt; //命名空间 using namespace cv; using namespace std; //全局函数声明部分 //主函数 int ...

    形态学滤波:对灰度图像进行开运算与闭运算。

    API函数

    morphologyEx()实现形态学8种运算

            //【3】获取结构元素
    	Mat element = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
    	//【4】形态学8种运算
    	//1.膨胀运算
    	morphologyEx(image, result, MORPH_DILATE, element);
    	//2.腐蚀运算
    	morphologyEx(image, result, MORPH_ERODE, element);
    	//3.开运算
    	morphologyEx(image, result, MORPH_OPEN, element);
    	//4.闭运算
    	morphologyEx(image, result, MORPH_CLOSE, element);
    	//5.形态学梯度
    	morphologyEx(image, result, MORPH_GRADIENT, element);
    	//6.顶帽
    	morphologyEx(image, result, MORPH_TOPHAT, element);
    	//7.黑帽
    	morphologyEx(image, result, MORPH_BLACKHAT, element);
    	//8.击中与否变换
    	morphologyEx(image, result, MORPH_HITMISS, element);

    一、c++示例代码

    //包含头文件
    #include <opencv2/opencv.hpp>
    //命名空间
    using namespace cv;
    using namespace std;
    //全局函数声明部分
    
    //主函数
    int main()
    {
    	//【1】载入图像,灰度化
    	Mat image = imread("F:\\opencvtest\\testImage\\beauty.png", 0);//灰度原图
    	//【2】检查是否载入成功
    	if (image.empty())
    	{
    		printf("读取图片错误,请确认目录下是否有imread函数指定图片存在! \n ");
    		return 0;
    	}
    	//【3】获取结构元素
    	Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
    	//【4】闭运算
    	Mat closedImage;
    	morphologyEx(image, closedImage, MORPH_CLOSE, element);
    	//【5】开运算
    	Mat openedImage;
    	morphologyEx(image, openedImage, MORPH_OPEN, element);
    	//【6】显示图像
    	imshow("14-灰度图像", image);
    	imshow("14-闭运算", closedImage);
    	imshow("14-开运算", openedImage);
    	//【7】保持窗口显示
    	waitKey(0);
    	return 0;
    }

    二、运行截图

    1、灰度原图


    2、闭运算


    3、开运算


    三、数字图像处理知识

    1.开运算

    定义:先腐蚀再膨胀,相当于先用结构元素B对A腐蚀,再对腐蚀结果用同样的结构元进行膨胀操作。

    通常用于去除小的(相对于结构元素而言)亮细节,而保留总体的灰度及和大的亮的特征不变。因为开始的腐蚀操作消除小的亮细节的同时也使图像变暗,所以后面的膨胀过程用于增加图像的整个强度,但不会再引入被去除的细节。

    2.闭运算

    定义:先膨胀再腐蚀,相当于先用结构元B对A进行膨胀,再对膨胀结果用同样的结构元进行腐蚀操作,过程与开运算正好相反。

    通常用于去除小的(相对于结构元素而言)暗细节,同时相对保留亮特征不变。因为开始的膨胀操作消除暗细节的同时也使图像变亮,所以后面的腐蚀过程使图像变暗,但不会再引入被去除的细节。


    展开全文
  • 二值图像处理开运算

    千次阅读 2017-05-29 22:17:31
    应用背景:在二值形态学图像处理中,除了腐蚀和膨胀这两种一次运算外,还有二次运算操作,开运算就是其中一种。

    应用背景:在前两篇博文中我们看到腐蚀操作会缩小图像前景、膨胀操作会增大图像前景,经过这两种变换后图像的细节也发生了一些变换,如果腐蚀和膨胀同时处理图像会产生什么效果呢,这个问题就是本文要讲的开操作。

    基本原理:在二值形态学图像处理中,除了腐蚀和膨胀这两种一次运算外,还有二次运算操作,开运算就是其中一种。用结构元B对图像A进行开操作表示为A 。B,用集合运算定义如下:

                                                                           

    从上式可知,开操作是先对图像进行腐蚀然后进行膨胀。

    C++实现:把前两篇博文中的腐蚀操作和膨胀操作的代码合在一起就完成了开操作的C++实现。

    运行结果:在VS2010中运行MFC多文档程序得到结果如下图

    开操作前的lena图像


    开操作后的lena图像


    从开操作的处理结果来看,达到先腐蚀后膨胀的双重效果,开操作平滑了图像物体的边缘、断开了较窄的狭颈并消除了细长的突出物。

    展开全文
  • 1 图像开运算(先腐蚀,后膨胀) 1.1 基本原理 1.2 代码示例 2 图像运算(先膨胀,后腐蚀) 2.1 基本原理 2.2 代码示例 3 图像梯度运算(膨胀—腐蚀) 3.1 基本原理 3.2 代码示例 参考资料 前面介绍了 形态学...
  • 形态学滤波:二值图像进行开运算与闭运算。morphologyEx()函数可以实现形态学处理的很多运算,慢慢来~一、c++示例代码//包含头文件 #include &lt;opencv2/opencv.hpp&gt; //命名空间 using namespace cv; ...
  • 图像开运算和闭运算

    千次阅读 2020-06-12 09:35:53
    1)开运算:先对图像腐蚀后膨胀。 A○S= (AΘS)⊕ S 作用:用来消除小的物体,平滑形状边界,并且不改变其面积。可以去除小颗粒噪声,断开物体之间的粘连。 2)闭运算:先对图像膨胀后腐蚀 A●S= (A⊕S)Θ S...
  • python 图像开运算

    千次阅读 2017-11-07 21:54:35
    开运算和闭运算就是将腐蚀和膨胀按照一定的次序进行处理。但这两者并不是可逆的,即先后闭并不能得到原先的图像。 闭运算用来连接被误分为许多小块的对象,而开运算用于移除由图像噪音形成的斑点。 闭运算操作...
  • 图像开运算

    千次阅读 2017-11-30 20:50:48
    matlab图像处理形态学滤波之开运算运算(1)  刚入门的朋友估计对开闭运算还不太了解,首先先了解几个名词: 腐蚀: 是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体...
  • 图像开运算

    千次阅读 2015-12-19 11:53:17
    开运算公式如下: #include"cv.h" #include "highgui.h" void erode(CvMat *src, CvMat *dst); void dilate(CvMat *src, CvMat *dst); void open(CvMat *src, CvMat *dst); int main() { ...
  • 图像形态学之开运算和闭运算

    万次阅读 2018-03-03 16:44:49
    开运算相当于对图像进行腐蚀运算进行膨胀运算,可以消除离散点和"毛刺",可以将两个物体分开。 闭运算相当于对图像进行膨胀运算进行腐蚀运行,可以填充图像的内部孔洞和图像的凹角点,可以把两个...
  • 形态学应用——图像开运算与闭运算

    万次阅读 多人点赞 2018-06-11 20:16:42
    开运算 = 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了) 开运算的效果图如下图所示: 开运算总结: (1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。 (2)开运算是一...
  • 图像进行卷积运算来提取特征

    千次阅读 2017-03-09 21:45:52
    一副数字图像可以看作一个二维空间的离散函数可以表示为f(x, y), 假设有对于二维卷积操作函数C(u, v) ,则会产生输出图像g(x, y) = f(x, y) *C(u,v), 利用卷积可以实现对图像模糊处理,边缘... 目标图像进行归一化处
  • 本文简单介绍了形态变换中的开运算和闭运算开运算和闭运算是形态学中最为重要的两个组合运算,这两个运算是不同形状不同大小的核对图像变换的影响比较大,开运算有助于断开一些图像间的细小连接或背景上的一些图像...
  • 彩色图像+开运算+闭运算

    千次阅读 2014-05-16 16:03:47
    在2012a中help imclose发现它说只能
  • matlab图像处理之开运算运算(1)

    万次阅读 多人点赞 2017-03-09 10:01:35
    matlab图像处理形态学滤波之开运算运算(1)  刚入门的朋友估计对开闭运算还不太了解,首先先了解几个名词: 腐蚀: 是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。   ...
  • 开运算---先腐蚀,后膨胀。去除图像中小的亮点(CV_MOP_OPEN);闭运算---先膨胀,后腐蚀。去除图像中小的暗点(CV_MOP_CLOSE);形态学梯度---原图膨胀图像 — 原图腐蚀图像(CV_MOP_GRADIENT);顶帽---原图像 —...
  • 1 图像顶帽运算(原始图像开运算) 1.1 基本原理 1.2 代码示例 2 图像黑帽运算(闭运算 — 原始图像) 2.1 基本原理 2.2 代码示例 参考资料 前面介绍了 形态学处理——图像开运算图像运算,其中: 图像...
  • 前文传送门: ...「Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间」 「Python 图像处理 OpenCV (5):图像的几何变换」 「Python 图像处理 OpenCV (6):图像的阈值处理」 「Python .
  • 回顾 在 简单的图像处理——1. 图像的形态学操作:膨胀与...图像开运算 开运算的具体实现:通过先进性腐蚀操作,再进行膨胀操作得到。我们在移除小的对象时候很有用(假设物品是亮色,前景色是黑色),被用来去除...
  • 数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是...本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像顶帽运算图像黑帽运算,基础性知识希望您有所帮助。
  • 其基本的运算包括:腐蚀和膨胀、开运算和闭运算图像顶帽运算图像底帽运算、骨架抽取、形态学梯度、Top-hat变换等。万字长文整理,希望您有所帮助。该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解...
  • 1【首先我们两幅图像进行操作】当我们需要一些图像特效或者在图像上叠加信息时,就需要用到图像加法。我们只用调用cv::add函数就可以完成,更准确的说是cv::addWeighted()函数来完成图像的加法。cv::addWeighted...
  • OpenCV 形态学操作之腐蚀与膨胀,开运算与闭运算,顶帽与黑帽,图像梯度运算
  • 图像的腐蚀和膨胀可以做更多的事情,可以通过膨胀和腐蚀来做一些图像的高级形态学变化,图像的高级形态学变化 有图像开运算、闭运算、形态学梯度、顶帽,黑帽。二、图像高级形态学变化 1、开运算:先腐蚀后膨胀...
  • 图像开运算+闭运算+腐蚀+膨胀

    千次阅读 2011-09-10 14:34:19
    2. 开运算和闭运算       (1)开运算  先腐蚀后膨胀的过程称为开运算。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。     (2)闭运算  先膨胀...
  • 图像处理】-021 开运算和闭运算

    千次阅读 2019-02-14 16:55:37
    图像处理】-021 开运算和闭运算   上一篇中说到了图像的形态学操作,介绍了腐蚀和膨胀。由于腐蚀和膨胀都会目标的面积产生较大的影响(依据操作元素的大小),影响图像中正常目标的判断。在形态学操作中,还有...
  • 图像的膨胀和腐蚀、图像开运算与闭运算
  • 知识点: 1. 形态学理论定义了一系列运算,应用预定义的形状元素来...当结构元素的原点与给定的像素对齐时,它与图像的相交部分定义了一组进行形态学运算的像素。 3. 腐蚀:每个像素与结构相交的集合替换成最小的像

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 167,591
精华内容 67,036
关键字:

对图像进行开运算