图像形态学操作—腐蚀扩展深度

在这里,我们想向大家解释这本书的数字图像处理对冈萨雷斯的扩大和使用腐蚀-definedopencv取得的成果,然后控制它们之间的差异。

一:opencv达到

在这之前能够看我的另外一篇blog:http://blog.csdn.net/lu597203933/article/details/17184439

膨胀:

案例代码:

int main()
{
	int a[8][8] = {
		{0,0,0,0,0,0,0,0},
		{0,0,5,1,0,0,1,1},
		{0,1,0,1,0,1,0,0},
		{0,1,1,2,1,0,1,0},
		{0,0,0,1,0,1,0,0},
		{0,1,0,0,0,0,0,1},
		{0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0}
	};
	Mat S = Mat::zeros(8, 8, CV_8UC1);
	for(int j = 0; j < S.rows; j++)
	{
		for(int i = 0; i < S.cols; i++)
		{
			S.at<uchar>(j,i) = a[j][i];
		}
	}
	cout << "S = " << endl << " " << S << endl;
	Mat result;
	Mat dilated = Mat::zeros(3, 3, CV_8UC1);
	dilated.at<uchar>(0,1) = 1;
	//eroded.at<uchar>(0,2) = 1;
	dilated.at<uchar>(1,0) = 1;
	dilated.at<uchar>(1,1) = 2;          // 结构元素非0即1
	dilated.at<uchar>(1,2) = 1;
	dilated.at<uchar>(2,1) = 1;
	cout << "dilated = " << endl << " " << dilated << endl;
	dilate(S, result, dilated);
	cout << "result = " << endl << " " << result << endl;
	return 0;
}

结果:

膨胀就是假设结构元B有一处非0,而A相应位置非0,则求出A中与B中相应非0处所有像素最大值来取代当前像素点值。Opencv中默认的结构元是3*3的矩阵,所有非0。

腐蚀:

案例代码:

int main()
{
	int a[8][8] = {
		{0,0,0,0,0,0,0,0},
		{0,0,5,1,0,0,1,1},
		{0,1,0,1,0,1,0,0},
		{0,1,1,2,1,0,1,0},
		{0,0,0,1,0,1,0,0},
		{0,1,0,0,0,0,0,1},
		{0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0}
	};
	Mat S = Mat::zeros(8, 8, CV_8UC1);
	for(int j = 0; j < S.rows; j++)
	{
		for(int i = 0; i < S.cols; i++)
		{
			S.at<uchar>(j,i) = a[j][i];
		}
	}
	cout << "S = " << endl << " " << S << endl;
	Mat result;
	Mat eroded = Mat::zeros(3, 3, CV_8UC1);
	eroded.at<uchar>(0,1) = 1;
	//eroded.at<uchar>(0,2) = 1;
	eroded.at<uchar>(1,0) = 1;
	eroded.at<uchar>(1,1) = 2;          // 结构元素非0即1
	eroded.at<uchar>(1,2) = 1;
	eroded.at<uchar>(2,1) = 1;
	cout << "eroded = " << endl << " " << eroded << endl;
	erode(S, result, eroded);
	cout << "result = " << endl << " " << result << endl;
	return 0;

结果:

腐蚀就是结构元B处非0,则A相应位置也全非0。且取全非0处最小值来取代当前像素点的值。

二:书中定义

膨胀: .

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTHU1OTcyMDM5MzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >这里的B是结构元。B~是结构元的反射。反射不明确能够看书,就是旋转或者按中心点对称。如:

0 1   的反射就是 1 1

1 1                        1 0

与opencv中唯一的差别就是必须得求反射,而opencv中则直接用给定的结构元B。

腐蚀: 

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTHU1OTcyMDM5MzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

案例:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTHU1OTcyMDM5MzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

作者:小村长  出处:http://blog.csdn.net/lu597203933 欢迎转载或分享,但请务必声明文章出处。
(新浪微博:http://weibo.com/2653613245/profile , 欢迎交流!

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-11-08 01:47:19

图像形态学操作—腐蚀扩展深度的相关文章

图像形态学操作—腐蚀膨胀深入

这里我们主要想讲解冈萨雷斯的数字图像处理这本书上膨胀腐蚀的定义及用opencv实现的结果,然后对比它们之间的差异. 一:opencv实现 在这之前可以看我的另外一篇blog:http://blog.csdn.net/lu597203933/article/details/17184439 膨胀: 案例代码: int main() { int a[8][8] = { {0,0,0,0,0,0,0,0}, {0,0,5,1,0,0,1,1}, {0,1,0,1,0,1,0,0}, {0,1,1,2,

OpenCV学习 7:图像形态学:腐蚀、膨胀

原创文章,欢迎转载,转载请注明出处 首先什么是图像形态学?额,这个抄下百度到的答案.基本思想:    用具有一定形态的结构元素去度量和提取图像中的对应形状已达到对图像分析和识别的目的,形态学图像处理表现为一种领域运算方式(这个和前面的模糊运算是一样的运算方式),效果取决于结构元素(就是前面smooth里面的核)的大小,内容以及逻辑运算的性质.看了这些定义是不是很晕,对很晕...我比较关心的是它的用途和怎么计算.    用途是:简化图像数据,保持他们基本的形状特性,并出去不相干的结构.    基本

图像形态学操作

形态学-腐蚀操作 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()

机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)

1.cv2.dilate(src, kernel, iteration) 参数说明: src表示输入的图片, kernel表示方框的大小, iteration表示迭代的次数 膨胀操作原理:存在一个kernel,在图像上进行从左到右,从上到下的平移,如果方框中存在白色,那么这个方框内所有的颜色都是白色 代码: 1.读取带有毛躁的图片 2.使用cv2.erode进行腐蚀操作 3.使用cv2.dilate进行膨胀操作 import cv2 import numpy as np # 1.读入图片 img

opencv:形态学操作-腐蚀与膨胀

#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { Mat src = imread("f:/images/shuang001.jpg"); Mat gray, binary; cvtColor(src, gray, COLOR_BGR2GRAY); threshol

python实现图像膨胀和腐蚀算法

如果您觉得本文不错!记得点赞哦! 一. 图像形态学简介: 经验之谈:形态学操作一般作用于二值图像,来连接相邻的元素(膨胀)或分离成独立的元素(侵蚀).腐蚀和膨胀是针对图片中的白色(即前景)部分! 二. 图像形态学操作 膨胀和腐蚀的算法: 膨胀算法: 对于待操作的像素 f(x,y),不论 f(x,y-1) .f(x,y+1) .f(x-1,y) .f(x+1,y) 哪一个为255,则 f(x,y)=255. 膨胀操作 ↑ 换句话说:将待操作的图像像素与以下  4-近邻矩阵 相乘,结果大于255的话

Atitit 图像处理—图像形态学(膨胀与腐蚀)

Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop里面的处理5 1.5. 类库的处理,好像没找到jhlabs,6 1.6. Attilax 源码6 1.1. 膨胀与腐蚀 说概念可能很难解释,我们来看图,首先是原图: 膨胀以后会变成这样: 腐蚀以后则会变成这样: 看起来可能有些莫名其妙,明明是膨胀,为什么字反而变细了,而明明是腐蚀,为什么字反而变粗了

OpenCV2:大学篇 形态学技术-腐蚀与膨胀操作

一.简介 图像处理中的形态学操作用于图像预处理操作(去噪 形状简化) 图像增强(骨架提取 细化  凸包  物体标记)  物体背景分割及物体形态量化等场景 二.腐蚀与膨胀操作 OpenCV 提供了 erode() 进行腐蚀操作 提供了 dilate() 进行膨胀操作 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.h

EasyPR--开发详解(4)形态学操作、尺寸验证、旋转等操作

在上一篇深度分析与调优讨论中,我们介绍了高斯模糊,灰度化和Sobel算子.在本文中,会分析剩余的定位步骤. 根据前文的内容,车牌定位的功能还剩下如下的步骤,见下图中未涂灰的部分. 图1 车牌定位步骤 我们首先从Soble算子分析出来的边缘来看.通过下图可见,Sobel算子有很强的区分性,车牌中的字符被清晰的描绘出来,那么如何根据这些信息定位出车牌的位置呢? 图2 Sobel后效果 我们的车牌定位功能做了个假设,即车牌是包含字符图块的一个最小的外接矩形.在大部分车牌处理中,这个假设都能工作的很好.