精华内容
下载资源
问答
  • 文章目录1. 侵蚀 (白色区域减小)demo效果2. 扩张demo效果3. 形态学变化(组合)3.1开运算 cv::MORPH_OPENdemo效果3.2 闭运算 cv::...侵蚀的基本思想就像土壤侵蚀一样,它侵蚀前景物体的边界(尽量使前景保持白色)。它

    1. 侵蚀 (白色区域减小)

    侵蚀的基本思想就像土壤侵蚀一样,它侵蚀前景物体的边界(尽量使前景保持白色)。它是做什么的呢?内核滑动通过图像(在2D卷积中)。原始图像中的一个像素(无论是1还是0)只有当内核下的所有像素都是1时才被认为是1,否则它就会被侵蚀(变成0)。

    结果是,根据内核的大小,边界附近的所有像素都会被丢弃。因此,前景物体的厚度或大小减小,或只是图像中的白色区域减小。它有助于去除小的白色噪声(正如我们在颜色空间章节中看到的),分离两个连接的对象等。

    CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,
                             Point anchor = Point(-1,-1), int iterations = 1,
                             int borderType = BORDER_CONSTANT,
                             const Scalar& borderValue = morphologyDefaultBorderValue() );
    
    在多通道图像的情况下,每个通道都是独立处理的。
    @param src 			//输入图像; 通道数可以是任意的,但深度应为以下之一
    					CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
    @param dst 			//输出与src大小和类型相同的图像。
    @param kernel		//用于腐蚀的结构元素; 如果`element = Mat()`,则为`3 x 3`矩形
    					使用结构元素。 可以使用#getStructuringElement创建内核。
    @param anchor 		//元素内锚的位置; 默认值(-1,-1)表示锚点位于元素中心。
    @param iterations 	//施加腐蚀的次数。
    @param borderType 	//像素外推方法,请参见#BorderTypes
    @param borderValue 	//边界不变时的边界值
    

    demo

    int main() {
    	cv::namedWindow("src",0);
    	cv::namedWindow("dst", 0);
    	cv::Mat src = cv::imread("./img/liangbaikai.jpg", 1);
    	cv::Mat dst;
    	//获取自定义核  
    	cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 10));
    	cv::erode(src,dst,element);
    	cv::imshow("src", src);
    	cv::imshow("dst", dst);
    	cv::imwrite("./img/dst_liangbaikai.jpg", dst);
    	cv::waitKey(0);
    
    }
     
    

    效果

    原图:
    在这里插入图片描述
    结果:
    在这里插入图片描述

    2. 扩张

    它与侵蚀正好相反。如果内核下的至少一个像素为“ 1”,则像素元素为“ 1”。因此,它会增加图像中的白色区域或增加前景对象的大小。通常,在消除噪音的情况下,腐蚀后会膨胀。因为腐蚀会消除白噪声,但也会缩小物体。因此,我们对其进行了扩展。由于噪音消失了,它们不会回来,但是我们的目标区域增加了。在连接对象的损坏部分时也很有用。

    CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,
                              Point anchor = Point(-1,-1), int iterations = 1,
                              int borderType = BORDER_CONSTANT,
                              const Scalar& borderValue = morphologyDefaultBorderValue() );
                            
    在多通道图像的情况下,每个通道都是独立处理的。
    
    @param src 			//输入图像; 通道数可以是任意的,但深度应为以下之一
    					CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
    @param dst 			//输出与src大小和类型相同的图像。
    @param kernel		//用于扩展的结构元素; 如果elemenat = Mat(),则为3 x 3的矩形
    					使用结构元素。 可以使用#getStructuringElement创建内核
    @param anchor 		//元素内锚的位置; 默认值(-1,-1)表示锚点位于元素中心。
    @param iterations 	//进行扩张的次数。
    @param borderType 	//像素外推方法,请参见#BorderTypes
    @param borderValue 	//边界不变时的边界值  
    

    demo

    int main() {
    	cv::namedWindow("src",0);
    	cv::namedWindow("dst", 0);
    	cv::Mat src = cv::imread("./img/liangbaikai.jpg", 1);
    	cv::Mat dst;
    	//获取自定义核  
    	cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
    	cv::dilate(src,dst,element);
    	cv::imshow("src", src);
    	cv::imshow("dst", dst);
    	cv::imwrite("./img/dst_liangbaikai.jpg", dst);
    	cv::waitKey(0);
    
    }
    

    效果

    原图:
    在这里插入图片描述

    结果:
    在这里插入图片描述

    3. 形态学变化(组合)

    CV_EXPORTS_W 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() );
                                    
    在多通道图像的情况下,每个通道都是独立处理的。
    
    @param src 				//源图像。通道数可以是任意的。深度应为以下之一
    						CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
    @param dst	 			//与源图像大小和类型相同的目标图像。
    @param op 				//形态学操作的类型,请参见#MorphTypes
    @param kernel			//构造元素。可以使用#getStructuringElement创建它。
    @param anchor 			//锚定在内核中的位置。负值表示锚点位于内核中心。
    @param iterations 		//施加腐蚀和膨胀的次数。
    @param borderType 		//像素外推方法,请参见#BorderTypes
    @param borderValue 		//边界不变时的边界值。默认值有一个特殊的含义。
    
    @note迭代次数是将应用腐蚀或膨胀操作的次数。
    例如,具有两次迭代的开运算(#MORPH_OPEN)等效于应用
    依次为:腐蚀->腐蚀->膨胀->膨胀(而不是腐蚀->膨胀->腐蚀->膨胀)。
    
    

    3.1开运算 cv::MORPH_OPEN

    开运算就是先侵蚀然后扩张,它对于消除噪音很有用

    demo

    int main() {
    	cv::namedWindow("src",0);
    	cv::namedWindow("dst", 0);
    	cv::Mat src = cv::imread("./img/lbk.jpg", 1);
    	cv::Mat dst;
    	//获取自定义核  
    	cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 10));
    	cv::morphologyEx(src,dst, cv::MORPH_OPEN,element);
    	cv::imshow("src", src);
    	cv::imshow("dst", dst);
    	cv::imwrite("./img/dst_liangbaikai.jpg", dst);
    	cv::waitKey(0);
    }
    

    效果

    原图:
    在这里插入图片描述

    结果:
    在这里插入图片描述

    3.2 闭运算 cv::MORPH_CLOSE

    闭运算就是先扩张再侵蚀,在关闭前景对象内部的小孔或对象上的小黑点时很有用。

    demo

    int main() {
    	cv::namedWindow("src",0);
    	cv::namedWindow("dst", 0);
    	cv::Mat src = cv::imread("./img/lbk.jpg", 1);
    	cv::Mat dst;
    	//获取自定义核  
    	cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 10));
    	cv::morphologyEx(src,dst, cv::MORPH_CLOSE,element);
    	cv::imshow("src", src);
    	cv::imshow("dst", dst);
    	cv::imwrite("./img/dst_liangbaikai.jpg", dst);
    	cv::waitKey(0);
    }
    

    效果

    原图:
    在这里插入图片描述

    结果:
    在这里插入图片描述

    3.3 形态学梯度 cv::MORPH_GRADIENT

    这是图像扩张和侵蚀之间的区别。结果将看起来像对象的轮廓。

    demo

    int main() {
    	cv::namedWindow("src",0);
    	cv::namedWindow("dst", 0);
    	cv::Mat src = cv::imread("./img/lbk.jpg", 1);
    	cv::Mat dst;
    	//获取自定义核  
    	cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 10));
    	cv::morphologyEx(src,dst, cv::MORPH_GRADIENT,element);
    	cv::imshow("src", src);
    	cv::imshow("dst", dst);
    	cv::imwrite("./img/dst_liangbaikai.jpg", dst);
    	cv::waitKey(0);
    }
    

    效果

    原图:
    在这里插入图片描述

    结果:
    在这里插入图片描述

    3.4 顶帽 cv::MORPH_TOPHAT

    它是输入图像和图像开运算之差。

    demo

    int main() {
    	cv::namedWindow("src",0);
    	cv::namedWindow("dst", 0);
    	cv::Mat src = cv::imread("./img/lbk.jpg", 1);
    	cv::Mat dst;
    	//获取自定义核  
    	cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 10));
    	cv::morphologyEx(src,dst, cv::MORPH_TOPHAT,element);
    	cv::imshow("src", src);
    	cv::imshow("dst", dst);
    	cv::imwrite("./img/dst_liangbaikai.jpg", dst);
    	cv::waitKey(0);
    }
    
    

    效果

    原图:
    在这里插入图片描述

    结果:
    在这里插入图片描述

    3.5 黑帽 cv::MORPH_BLACKHAT

    这是输入图像和图像闭运算之差。

    demo

    int main() {
    	cv::namedWindow("src",0);
    	cv::namedWindow("dst", 0);
    	cv::Mat src = cv::imread("./img/lbk.jpg", 1);
    	cv::Mat dst;
    	//获取自定义核  
    	cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 10));
    	cv::morphologyEx(src,dst, cv::MORPH_BLACKHAT,element);
    	cv::imshow("src", src);
    	cv::imshow("dst", dst);
    	cv::imwrite("./img/dst_liangbaikai.jpg", dst);
    	cv::waitKey(0);
    }
    
    

    效果

    原图:
    在这里插入图片描述

    结果:

    在这里插入图片描述

    4. 自定义内核的种类

    CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
    
    enum MorphShapes {
        MORPH_RECT    = 0, //!< a rectangular structuring element:  \f[E_{ij}=1\f]
        MORPH_CROSS   = 1, //!< a cross-shaped structuring element:
                           //!< \f[E_{ij} =  \fork{1}{if i=\texttt{anchor.y} or j=\texttt{anchor.x}}{0}{otherwise}\f]
        MORPH_ELLIPSE = 2 //!< an elliptic structuring element, that is, a filled ellipse inscribed
                          //!< into the rectangle Rect(0, 0, esize.width, 0.esize.height)
    };
    
    # 矩形内核
    cv::getStructuringElement(cv::MORPH_RECT,(5,5))
    	 1  1  1  1  1 
    	 1  1  1  1  1 
    	 1  1  1  1  1 
    	 1  1  1  1  1 
    	 1  1  1  1  1 
           
    # 椭圆内核
    cv::getStructuringElement(cv::MORPH_ELLIPSE,(5,5))
         0  0  1  0  0
         1  1  1  1  1
         1  1  1  1  1
         1  1  1  1  1
         0  0  1  0  0
    
    # 十字内核
    cv::getStructuringElement(cv::MORPH_CROSS,(5,5))
         0  0  1  0  0
         0  0  1  0  0
         1  1  1  1  1
         0  0  1  0  0
         0  0  1  0  0
    
    展开全文
  • opencv-侵蚀和扩张

    2019-09-14 15:30:41
    最基本的形态作用是:侵蚀和扩张。 消除噪音 隔离单个元素并连接图像中的不同元素。 查找图像中的强度凸点或孔 扩张 该操作包括将图像与某些内核进行卷积,其可以具有任何形状或尺寸,通常为正方形或圆形。 ...

    形态作业:形态操作将结构元素应用于输入图像并生成输出图像。

    最基本的形态作用是:侵蚀和扩张。

    1. 消除噪音
    2. 隔离单个元素并连接图像中的不同元素。
    3. 查找图像中的强度凸点或孔

    扩张

    该操作包括将图像与某些内核进行卷积,其可以具有任何形状或尺寸,通常为正方形或圆形。

    内核具有定义的锚点,通常是内核的中心。

    当内核在图像上扫描时,我们计算由B重叠的最大像素值,并用该最大值替换锚点位置中的图像像素。您可以推断,这种最大化的操作会使图像中的亮区“增长”(因此称为扩张)。

    执行扩张的代码在opencv里为:

     dilate(src, dilation_dst, element );
    /*
    1.src为原图像(imread)
    2.erosion_dst输出图像
    3.element 为执行操作的内核(卷积核),默认为3*3的矩阵
    我们可以使用cv::getStructuringElement来指定需要的内核(如下使用)
    */
     Mat element = getStructuringElement( erosion_type,
                           Size( 2*erosion_size + 1, 2*erosion_size+1 ),
                           Point( erosion_size, erosion_size ) );
    /*
    
    1.矩形框:MORPH_RECT
    2.十字架:MORPH_CROSS
    3.椭圆:MORPH_ELLIPSE
    
    */
    

    侵蚀

    它计算给定内核区域的局部最小值。

    当内核在图像上扫描时,我们计算由重叠的最小像素值,并用该最小值替换锚点下的图像像素。

    对于扩张的例子,我们可以将侵蚀算子应用于原始图像

    opencv种侵蚀的接口为:

    erode( src, erosion_dst, element );//参数解释同上
    

     

     

     

    展开全文
  • import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Size; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs....
    package com.opencv;
    
    import org.opencv.core.Core;
    import org.opencv.core.Mat;
    import org.opencv.core.Point;
    import org.opencv.core.Size;
    import org.opencv.highgui.HighGui;
    import org.opencv.imgcodecs.Imgcodecs;
    import org.opencv.imgproc.Imgproc;
    
    public class OpenCVDemo {
    	public static void main(String[] args) {
    		/*	1.加载本地动态链接库
    		 * 	加载动态链接库有很多种方法,也可以写成static静态代码块。
    		 */
    		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    
    		/*	2 读取测试图片
    		 *	imread:输入图片所在地址,返回Mat矩阵对象。
    		 *	Mat对象中保存着加载图片的大小、通道、像素数据等等与图片有关的数据
    		 */
    		Mat image = Imgcodecs.imread("c:\\123.jpg");
    		// 3. 设置图片的大小,让图片显示的时候小一点 
    		//Imgproc.resize(image, image, new Size(image.cols()/2,image.rows()/2));
    		
    		HighGui.imshow("原图", image);
    		HighGui.waitKey();
    		
    		//使用相同次数的腐蚀与膨胀,可以使目标表面更平滑。
    		erode(image);
    		dilate(image);
    		
    	}
    	
    	/**
    	 * 	图像腐蚀-暗色扩张亮色被侵蚀
    	 * 	腐蚀就是使用算法,将图像的边缘腐蚀掉。作用就是将目标的边缘的“毛刺”踢除掉
    	 */
    	public static void erode(Mat src) {
    		Mat image = new Mat(src.size(),src.type());
    		/*	getStructuringElement()
    		 *	返回指定大小和形状的结构元素以进行形态学操作。该函数构造并返回可以进一步传递给#erode,#dilate或#morphologyEx的结构元素。
    		 *	但是,您也可以自己构造一个任意的二进制掩码,并将其用作结构元素。
    		 *	@param shape 枚举中元素形状之一
    		 *	@param ksize结构元素的大小。
    		 *	@param锚元素内的锚位置。 默认值(-1,-1)表示锚点位于中心。 注意,只有十字形元件的形状取决于锚位置。
    		 *	在其他情况下,锚点仅调节形态运算结果偏移了多少。
    		 *	第一个参数 -> 矩形: MORPH_RECT 交叉形: MORPH_CROSS 椭圆形: MORPH_ELLIPSE
    		 */
    		Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3), new Point(-1,-1));
    		/*	erode() 该功能支持就地模式(无需新建Mat对象,可直接操作输入对象)
    		 *	通过使用特定的结构元素腐蚀图像。 该函数使用指定的结构化元素腐蚀源图像,
    		 *	该结构化元素确定在其上采用最小值的像素邻域的形状 。
    		 *	可以进行多次(迭代)腐蚀。 在多通道图像的情况下,每个通道都是独立处理的。
    		 *	@param src输入图像; 通道数可以是任意的,但深度应为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
    		 *	@param dst输出图像的大小和类型与src相同。
    		 *	@param用于腐蚀的内核结构元素; 如果{element = Mat()},则默认使用{3 x 3}矩形结构元素。
    		 *	可以使用#getStructuringElement创建内核。
    		 *	@param元素内锚点的锚点位置; 默认值(-1,-1)表示锚点位于元素中心。
    		 *	@param迭代应用腐蚀的次数。
    		 */
    		Imgproc.erode(src, image, kernel,new Point(-1,-1),1);
    		HighGui.imshow("图像腐蚀-暗色扩张亮色被侵蚀", image);
    		HighGui.waitKey();
    	}
    
    	/**
    	 * 	图像膨胀-亮色扩张暗色被侵蚀
    	 * 	膨胀就是使用算法,将图像的边缘扩大些。作用就是将目标的边缘或者是内部的坑填掉
    	 */
    	public static void dilate(Mat src) {
    		Mat image = new Mat(src.size(),src.type());
    		Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3), new Point(-1,-1));
    		/*	dilate()该功能支持就地模式(无需新建Mat对象,可直接操作输入对象)
    		 *	通过使用特定的结构元素来放大图像。 该函数使用指定的结构化元素来扩展源图像,
    		 *	该结构化元素确定在其上获取最大值的像素邻域的形状。
    		 *	可以进行几次(迭代)扩张。 在多通道图像的情况下,每个通道都是独立处理的。
    		 *	@param src输入图像; 通道数可以是任意的,但深度应为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
    		 *	@param dst输出图像的大小和类型与src相同。
    		 *	@param用于扩展的内核结构元素; 如果elemenat = Mat(),则使用3 x 3的矩形结构元素。
    		 *	可以使用#getStructuringElement创建内核
    		 *	@param元素内锚点的锚点位置; 默认值(-1,-1)表示锚点位于元素中心。
    		 *	@param迭代应用膨胀的次数。
    		 */
    		Imgproc.dilate(src, image, kernel ,new Point(-1,-1),1);
    		HighGui.imshow("图像膨胀-亮色扩张暗色被侵蚀", image);
    		HighGui.waitKey();
    	}
    	
    }
    
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    作用:

    • 消除噪音
    • 隔离单个元素并连接图像中的不同元素。
    • 查找图像中的强度凸点或孔

    腐蚀:

    • 它计算给定内核区域的局部最小值。
    • 当内核在图像上扫描时,我们计算由重叠的最小像素值,并用该最小值替换锚点下的图像像素,图像的明亮区域(背景,显然)变得更薄,而黑暗区域(“写作”)变得更大。

    扩张:

    • 该操作包括将图像与某些内核进行卷积,其可以具有任何形状或尺寸,通常为正方形或圆形。
    • 内核具有定义的锚点,通常是内核的中心。
    • 当内核在图像上扫描时,我们计算由内核B重叠的最大像素值,并用该最大值替换锚点位置中的图像像素。您可以推断,这种最大化的操作会使图像中的亮区“增长”(因此称为扩张)。
    展开全文
  • opencv学习笔记九侵蚀与扩张 一.目标 应用两个非常常见的形态运算符:侵蚀和扩张。将使用以下OpenCV功能: 1.cv::erode 2.cv::dilate 二.形态作业 简而言之:一组基于形状处理图像的操作。形态操作将结构元素应用于...

    opencv学习笔记九侵蚀与扩张

    一.目标
    应用两个非常常见的形态运算符:侵蚀和扩张。将使用以下OpenCV功能:
    1.cv::erode
    2.cv::dilate
    二.形态作业
    简而言之:一组基于形状处理图像的操作。形态操作将结构元素应用于输入图像并生成输出图像。
    最基本的形态作用是:侵蚀和扩张。
    三.用途
    1.消除噪音
    2.隔离单个元素并连接图像中的不同元素。
    3.查找图像中的强度凸点或孔
    四.扩张
    当内核在图像上扫描时,我们计算由B重叠的最大像素值,并用该最大值替换锚点位置中的图像像素。您可以推断,这种最大化的操作会使图像中的亮区“增长”(因此称为扩张)。
    五.侵蚀
    这个操作是扩张的姊妹。它计算给定内核区域的局部最小值。
    当内核在图像上扫描时,我们计算由重叠的最小像素值,并用该最小值替换锚点下的图像像素
    六.Code

    #include "opencv2/imgproc.hpp"
    #include "opencv2/imgcodecs.hpp"
    #include "opencv2/highgui.hpp"
    using namespace cv;
    Mat src, erosion_dst, dilation_dst;
    int erosion_elem = 0;
    int erosion_size = 0;
    int dilation_elem = 0;
    int dilation_size = 0;
    int const max_elem = 2;
    int const max_kernel_size = 21;
    void Erosion( int, void* );
    void Dilation( int, void* );
    int main( int, char** argv )
    {
      src = imread( argv[1], IMREAD_COLOR );  //读取图片
      if( src.empty() )
        { return -1; }
      namedWindow( "Erosion Demo", WINDOW_AUTOSIZE ); //是指窗口 扩张图片
      namedWindow( "Dilation Demo", WINDOW_AUTOSIZE );//侵蚀图像窗口
      moveWindow( "Dilation Demo", src.cols, 0 );     //移动窗口
      createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo",
              &erosion_elem, max_elem,
              Erosion );//创建移动浮标
      createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo",
              &erosion_size, max_kernel_size,
              Erosion );//创建移动浮标
      createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",
              &dilation_elem, max_elem,
              Dilation );//创建移动浮标
      createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo",
              &dilation_size, max_kernel_size,
              Dilation );//创建移动浮标
      Erosion( 0, 0 ); //扩张函数
      Dilation( 0, 0 );//侵蚀函数
      waitKey(0);
      return 0;
    }
    void Erosion( int, void* )
    {
      int erosion_type = 0;
      if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }  //对于滑动框选则内核模型
      else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }
      else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }
      Mat element = getStructuringElement( erosion_type,
                           Size( 2*erosion_size + 1, 2*erosion_size+1 ),
                           Point( erosion_size, erosion_size ) );    //设定自己想要的内核
      erode( src, erosion_dst, element );
      imshow( "Erosion Demo", erosion_dst );
    }
    void Dilation( int, void* )
    {
      int dilation_type = 0;
      if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; }
      else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; }
      else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }
      Mat element = getStructuringElement( dilation_type,
                           Size( 2*dilation_size + 1, 2*dilation_size+1 ),
                           Point( dilation_size, dilation_size ) );
      dilate( src, dilation_dst, element );
      imshow( "Dilation Demo", dilation_dst );
    }
    

    补充函数解释:

    getStructuringElement()
    Mat cv::getStructuringElement	(	int 	shape,
    Size 	ksize,
    Point 	anchor = Point(-1,-1) 
    )		
    Python:
    cv.getStructuringElement(	shape, ksize[, anchor]	) ->	retval
    

    #include <opencv2/imgproc.hpp>

    ‎返回指定大小和形状的结构元素用于形态操作。‎

    ‎该功能构建并返回结构元件,可以进一步通过‎‎侵蚀‎‎,‎‎扩张‎‎或‎‎形态Ex。‎‎但是,您也可以自行构建任意的二进制掩码,并将其用作结构元素。‎

    Parameters
    1.shape ‎元素形状,可能是‎‎变形形状‎‎之一‎
    2.ksize ‎结构元件的大小。‎
    3.anchor ‎元素中的锚定位置。默认值‎‎(‎‎+1‎‎,‎‎+‎‎1‎‎)‎‎ ‎‎表示锚在中心。请注意,只有交叉形状的元素的形状取决于锚的位置。在其他情况下,锚只是调节变形操作的结果被转移多少。‎

    展开全文
  • opencv3_java 图像的侵蚀Erode erode

    千次阅读 2017-05-31 21:26:53
    图像的侵蚀Erode erode package opencv_java_demo; import org.opencv.core.*; import org.opencv.imgcodecs.*; import org.opencv.imgproc.Imgproc; public class Erode { public static void main(String[] ...
  • 本文的的目标就是实现对图片的侵蚀、膨胀和反转。 具体的代码如下:#include "stdafx.h"//由于是新建的空工程,所以需要新建stdafx.h和targetver.h两个头文件,不然会出现找不到头文件的问题 #include "opencv/cv.h...
  • 目录 一、dilate:扩张 效果: 二、erode:侵蚀 效果: 三、 从高斯模糊到边缘检测,到扩张,到侵蚀 一、dilate:扩张 dilate函数使用像素领域内的局部极大运算符来膨胀一张图片,从src输入,由dest输出。...
  • OpenCV 目前正在学习使用opencv和c++的教程,在不久的将来会发布一个机器人竞赛项目所有文件都实现了这个网站的例子: : 我实现的opencv函数是: 反转/侵蚀图像 视频捕捉对比度 直方图均衡化 对象颜色跟踪 我为...
  • import cv2.cv as cv #load image filename = "../Video/cat.jpg" image = cv.LoadImage(filename) ...grey = cv.CreateImage(size, depth, channels)#create one 100x100 single ...侵蚀:翻转的的扩展
  • 如题所述,没找到理想答案,打了一个python的模板,请大佬参考一下(分类:OpenCV): import cv2 import numpy as np input = np.array([[1,0,0,0,0], [1,0,0,0,1], [0,1,0,1,0], [0,0,1,0,0], [0,0,1,1,0]...
  • openCv-源码

    2021-03-29 15:45:59
    openCv侵蚀和扩张 形态学操作 应用:消除噪声,隔离元素加入不同元素,查找图像中凹凸的强度 膨胀-使对象更大/更厚 腐蚀使线条更细 平滑 模糊,高斯模糊,中值蓝色,双边过滤 取每个像素的邻居并归一化为邻居 开...
  • opencvOPENCV基本知识和小型项目 使用OPENCV进行基本图像操作 图像色彩转换 图像模糊 图像转换为边缘(Canny) 图像扩张 影像侵蚀 使用的图书馆 麻木 OpenCV
  • OpenCV学习指南

    2019-11-11 20:28:42
    OpenCV学习指南 这个OpenCV教程是供初学者入门的基础知识。在本指南中,您将学习使用Python使用OpenCV库进行的基本图像处理操作。虽然本教程针对刚入门图像处理和OpenCV库的初学者,但即使您有经验,我还是鼓励您...
  • 将imori.jpg大津二值化之后,进行两次形态学腐蚀处理。形态学处理中腐蚀操作如下:对于待操作的像素I(x,y)=255,I(x, y-1),I(x-1, y),I(x+1, y),I(x, y+1)中不论哪一个不为255,令I(x,y)=0。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 558
精华内容 223
关键字:

opencv侵蚀