opencv-形态学处理

开运算 (Opening)

  • 原理摘自:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html
  • 开运算是通过先对图像腐蚀再膨胀实现的。

  • 能够排除小团块物体(假设物体较背景明亮)
  • 请看下面,左图是原图像,右图是采用开运算转换之后的结果图。 观察发现字母拐弯处的白色空间消失。

闭运算(Closing)

  • 闭运算是通过先对图像膨胀再腐蚀实现的。

  • 能够排除小型黑洞(黑色区域)。

形态梯度(Morphological Gradient)

  • 膨胀图与腐蚀图之差

  • 能够保留物体的边缘轮廓,如下所示:

顶帽(Top Hat)

  • 原图像与开运算结果图之差

黑帽(Black Hat)

  • 闭运算结果图与原图像之差

  • 代码:
  • // ConsoleApplication3_6_23.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<opencv2/opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv;
    
    Mat src,dst;
    
    int pro_elem = 0;
    int pro_size = 0;
    int pro_operator = 0;
    
    const int max_elem = 2;
    const int max_size = 21;
    const int max_operator = 4;
    
    char* windowName = "Demo";
    void Image_pro(int,void*);
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	src = imread("hwl.jpg");
    	if(!src.data)
    		return -1;
    
    	namedWindow(windowName,CV_WINDOW_AUTOSIZE);
    
    	createTrackbar("Operator:\n 0:opening-1:closing-2:gradient-3:Top Hat-4:	Black Hat",
    		windowName,&pro_operator,max_operator,Image_pro);
    
    	createTrackbar("Element:\n 0:Rect-1:Cross-2:Ellipse",
    		windowName,&pro_elem,max_elem,Image_pro);
    
    	createTrackbar("Kernel size:\n 2n+1",
    		windowName,&pro_size,max_size,Image_pro);
    
    	Image_pro(0,0);
    	waitKey(0);
    	return 0;
    }
    
    void Image_pro(int,void*)
    {
    	int operation = pro_operator + 2;
    	Mat  element = getStructuringElement(pro_elem,Size(2*pro_size+1,2*pro_size+1),
    		Point(pro_size,pro_size));
    	morphologyEx(src,dst,operation,element);
    	imshow(windowName,dst);
    }
    

opencv-形态学处理

时间: 2024-09-29 03:26:57

opencv-形态学处理的相关文章

OPENCV形态学操作1

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

OPENCV形态学算法-2

一.漫水填充算法 该算法通过一个指定的种子点,来分析整张图片上的像素,并设置像素差异阈值,在阈值类的点,最后变成相同的颜色.该方法通过上下限和连通方式来达到不同的连通效果. 该方法常用与标记和分离图像的一部分,以便于对其做进一步的分析和处理,填充的结果总是连通的区域. API:void floodFill(源图像,掩码,Point 种子点,scaral 染色值,Rect* 重绘区域的最小边界矩形区域,scaral 与种子点颜色的负差最大值,scaral 与种子点颜色的正差最大值,int 操作方式

opencv 形态学操作应用-提取水平与垂直线

adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; int main(int argc, char** argv) { Mat src, dst; src = imread("E:/opencv3.2/Tes

opencv形态学操作之开运算、闭运算

原图: 开运算: 先腐蚀后膨胀叫开运算(因为先腐蚀会分开物体,这样容易记住),其作用是:分离物体,消除小区域.这类形态学操作用cv2.morphologyEx()函数实现: 下面两份代码分别对应通过先腐蚀后膨胀的效果 和 直接通过开运算的效果 import cv2 import numpy as np img = cv2.imread("zw.jpg", 0) kernel = np.ones((3, 3), np.uint8) kerne2 = np.ones((5, 5), np.

利用颜色和形态学两种方法进行车牌区域提取的OpenCV代码

要想提取车牌号,首先你要定位车牌区域嘛,本文分别两种方法用,即颜色和形态学的方法,对车牌区域进行判定.说得是两种方法,其实两种方法并无多大的区别,只是有一步的判断标准不一样而已,你看了下面整理出的的思路就知道两者的区别真的很小了. 方法一:利用颜色提取车牌区域的思路: ①求得原图像的sobel边缘sobelMat ②在HSV空间内利用车牌颜色阈值对图像进行二值化处理,得到图像bw_blue→ ③由下面的判别标准得到图像bw_blue_edge for (int k = 1; k != heigh

OpenCV入门笔记(六) 形态学变换

形态学变换(Morphological Transformations),其实是数学上的一个分支,是基于形状的一些列图像处理操作.OpenCV提供了很多方便而有用的操作函数. 一.腐蚀和膨胀(erosion & dilation) 腐蚀(erosion)和膨胀(dilation)是形态学中两个最基本的操作.他们结合后又会衍生出其他很多种复杂的过程.其基本思想很简单,就是用一个核函数,扫过原图像,用覆盖的区域中最值代替锚点(锚点即核函数当前的中心点,即扫描的中心点).下面是苏东坡<水调歌头·明

OpenCV笔记(九)——更多的形态学变换

Erode和Dilate是基本的形态学运算,根据这两种运算,我们能够组成更多形态学运算. 一.开运算 Openning dst = open(src, element) = dilate(erode(src, element)) 开运算就是将一幅图像先腐蚀再膨胀,主要作用是移除白色的小区域. 二.闭运算 Closing dst = close(src, element) = erode(dilate(src, element)) 闭运算就是将一幅图像先膨胀再腐蚀,主要作用是移除黑色的小区域. 三

opencv学习之路(15)、形态学其他操作(开、闭、顶帽、黑帽、形态学梯度)

一.形态学其他操作(用的不多,如果忘了也可以通过膨胀腐蚀得到相同效果) 1.开运算 2.闭运算 3.形态学梯度 4.顶帽 5.黑帽 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 Mat srcImg = imread("E://1.jpg"); 7 Mat dstImg; 8 Mat element = getStructuringElement(MORPH_R

OpenCV入门笔记(四) 形态学变换

形态学变换(Morphological Transformations),其实是数学上的一个分支,是基于形状的一系列图像处理操作.OpenCV提供了很多方便而有用的操作函数. 一.腐蚀和膨胀(erosion & dilation) 腐蚀和膨胀 是形态学中两个最基本的操作.他们结合后又会衍生出其他很多种复杂的过程.其基本思想很简单,就是用一个 核函数,扫过原图像,用覆盖的区域中最值代替锚点(核函数当前的中心点,即扫描的中心点).下面是苏东坡<水调歌头·明月几时有>的楷体图片,我们来看看腐

【opencv入门之七】形态学图像处理(一):膨胀、腐蚀

参考网站: http://blog.csdn.net/poem_qianmo/article/details/23710721 1.形态学(morphology)概述 数学形态学(Mathematical morphplogy)是数学形态学图像处理的基本理论.其基本的运算包括: 二值腐蚀和膨胀.二值开闭运算.骨架抽取.极限腐蚀.击中击不中变化.形态学梯度.Top-hat变换.颗粒分析.流域变换.灰值腐蚀和膨胀.灰值开闭运算.灰值形态学梯度等. 最基本的两种是:腐蚀和膨胀.其两的主要功能有: 消除