本文介绍使用OpenCV-Python进行形态学处理

getStructuringElement函数以及开、闭、腐蚀、膨胀原理讲解 阅读详情

提示:

转载请详细注明原作者及出处,谢谢!

本文介绍使用OpenCV-Python进行形态学处理

本文不介绍形态学处理的基本概念,所以读者需要预先对其有一定的了解。

定义结构元素

形态学处理的核心就是定义结构元素,在OpenCV-Python中,可以使用其自带的getStructuringElement函数,也可以直接使用NumPy的ndarray来定义一个结构元素。首先来看用getStructuringElement函数定义一个结构元素:

  1. element = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))  
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
这就定义了一个5×5的十字形结构元素,如下:

也可以用NumPy来定义结构元素,如下:

  1. NpKernel = np.uint8(np.zeros((5,5)))  
  2. for i in range(5):  
  3.     NpKernel[1, i] = 1  
  4.     NpKernel[i, 1] = 1  
NpKernel = np.uint8(np.zeros((5,5)))
for i in range(5):
	NpKernel[1, i] = 1
	NpKernel[i, 1] = 1
这两者方式定义的结构元素完全一样:
  1. [[0 0 1 0 0]  
  2.  [0 0 1 0 0]  
  3.  [1 1 1 1 1]  
  4.  [0 0 1 0 0]  
  5.  [0 0 1 0 0]]  
[[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-Python内置的常量定义椭圆(MORPH_ELLIPSE)和十字形结构(MORPH_CROSS)元素要简单一些,如果定义矩形(MORPH_RECT)和自定义结构元素,则两者差不多。

本篇文章将用参考资料1中的相关章节的图片做测试:


腐蚀和膨胀

下面先以腐蚀图像为例子介绍如何使用结构元素:

  1. #coding=utf-8  
  2. import cv2  
  3. import numpy as np  
  4.    
  5. img = cv2.imread('D:/binary.bmp',0)  
  6. #OpenCV定义的结构元素  
  7. kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))  
  8.   
  9. #腐蚀图像  
  10. eroded = cv2.erode(img,kernel)  
  11. #显示腐蚀后的图像  
  12. cv2.imshow("Eroded Image",eroded);  
  13.   
  14. #膨胀图像  
  15. dilated = cv2.dilate(img,kernel)  
  16. #显示膨胀后的图像  
  17. cv2.imshow("Dilated Image",dilated);  
  18. #原图像  
  19. cv2.imshow("Origin", img)  
  20.   
  21. #NumPy定义的结构元素  
  22. NpKernel = np.uint8(np.ones((3,3)))  
  23. Nperoded = cv2.erode(img,NpKernel)  
  24. #显示腐蚀后的图像  
  25. cv2.imshow("Eroded by NumPy kernel",Nperoded);  
  26.   
  27. cv2.waitKey(0)  
  28. cv2.destroyAllWindows()  
#coding=utf-8
import cv2
import numpy as np
 
img = cv2.imread('D:/binary.bmp',0)
#OpenCV定义的结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))

#腐蚀图像
eroded = cv2.erode(img,kernel)
#显示腐蚀后的图像
cv2.imshow("Eroded Image",eroded);

#膨胀图像
dilated = cv2.dilate(img,kernel)
#显示膨胀后的图像
cv2.imshow("Dilated Image",dilated);
#原图像
cv2.imshow("Origin", img)

#NumPy定义的结构元素
NpKernel = np.uint8(np.ones((3,3)))
Nperoded = cv2.erode(img,NpKernel)
#显示腐蚀后的图像
cv2.imshow("Eroded by NumPy kernel",Nperoded);

cv2.waitKey(0)
cv2.destroyAllWindows()

如上所示,腐蚀和膨胀的处理很简单,只需设置好结构元素,然后分别调用cv2.erode(...)和cv2.dilate(...)函数即可,其中第一个参数是需要处理的图像,第二个是结构元素。返回处理好的图像。

结果如下:


开运算和闭运算

了解形态学基本处理的同学都知道,开运算和闭运算就是将腐蚀和膨胀按照一定的次序进行处理。但这两者并不是可逆的,即先开后闭并不能得到原先的图像。代码示例如下:

  1. #coding=utf-8  
  2. import cv2  
  3. import numpy as np  
  4.    
  5. img = cv2.imread('D:/binary.bmp',0)  
  6. #定义结构元素  
  7. kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5))  
  8.   
  9. #闭运算  
  10. closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)  
  11. #显示腐蚀后的图像  
  12. cv2.imshow("Close",closed);  
  13.   
  14. #开运算  
  15. opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)  
  16. #显示腐蚀后的图像  
  17. cv2.imshow("Open", opened);  
  18.   
  19. cv2.waitKey(0)  
  20. cv2.destroyAllWindows()  
#coding=utf-8
import cv2
import numpy as np
 
img = cv2.imread('D:/binary.bmp',0)
#定义结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5))

#闭运算
closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
#显示腐蚀后的图像
cv2.imshow("Close",closed);

#开运算
opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
#显示腐蚀后的图像
cv2.imshow("Open", opened);

cv2.waitKey(0)
cv2.destroyAllWindows()

闭运算用来连接被误分为许多小块的对象,而开运算用于移除由图像噪音形成的斑点。因此,某些情况下可以连续运用这两种运算。如对一副二值图连续使用闭运算和开运算,将获得图像中的主要对象。同样,如果想消除图像中的噪声(即图像中的“小点”),也可以对图像先用开运算后用闭运算,不过这样也会消除一些破碎的对象。

对原始图像进行开运算和闭运算的结果如下:


用形态学运算检测边和角点

这里通过一个较复杂的例子介绍如何用形态学算子检测图像中的边缘和拐角(这里只是作为介绍形态学处理例子,实际使用时请用Canny或Harris等算法)。

检测边缘

形态学检测边缘的原理很简单,在膨胀时,图像中的物体会想周围“扩张”;腐蚀时,图像中的物体会“收缩”。比较这两幅图像,由于其变化的区域只发生在边缘。所以这时将两幅图像相减,得到的就是图像中物体的边缘。这里用的依然是参考资料1中相关章节的图片:

代码如下:

  1. #coding=utf-8  
  2. import cv2  
  3. import numpy  
  4.   
  5. image = cv2.imread("D:/building.jpg",0);  
  6. #构造一个3×3的结构元素   
  7. element = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))  
  8. dilate = cv2.dilate(image, element)  
  9. erode = cv2.erode(image, element)  
  10.   
  11. #将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像  
  12. result = cv2.absdiff(dilate,erode);  
  13.   
  14. #上面得到的结果是灰度图,将其二值化以便更清楚的观察结果  
  15. retval, result = cv2.threshold(result, 40, 255, cv2.THRESH_BINARY);   
  16. #反色,即对二值图每个像素取反  
  17. result = cv2.bitwise_not(result);   
  18. #显示图像  
  19. cv2.imshow("result",result);   
  20. cv2.waitKey(0)  
  21. cv2.destroyAllWindows()  
#coding=utf-8
import cv2
import numpy

image = cv2.imread("D:/building.jpg",0);
#构造一个3×3的结构元素 
element = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
dilate = cv2.dilate(image, element)
erode = cv2.erode(image, element)

#将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像
result = cv2.absdiff(dilate,erode);

#上面得到的结果是灰度图,将其二值化以便更清楚的观察结果
retval, result = cv2.threshold(result, 40, 255, cv2.THRESH_BINARY); 
#反色,即对二值图每个像素取反
result = cv2.bitwise_not(result); 
#显示图像
cv2.imshow("result",result); 
cv2.waitKey(0)
cv2.destroyAllWindows()
处理结果如下:

检测拐角

与边缘检测不同,拐角的检测的过程稍稍有些复杂。但原理相同,所不同的是先用十字形的结构元素膨胀像素,这种情况下只会在边缘处“扩张”,角点不发生变化。接着用菱形的结构元素腐蚀原图像,导致只有在拐角处才会“收缩”,而直线边缘都未发生变化。

第二步是用X形膨胀原图像,角点膨胀的比边要多。这样第二次用方块腐蚀时,角点恢复原状,而边要腐蚀的更多。所以当两幅图像相减时,只保留了拐角处。示意图如下(示意图来自参考资料1):

代码如下:

  1. #coding=utf-8  
  2. import cv2  
  3.   
  4. image = cv2.imread("D:/building.jpg", 0)  
  5. origin = cv2.imread("D:/building.jpg")  
  6. #构造5×5的结构元素,分别为十字形、菱形、方形和X型  
  7. cross = cv2.getStructuringElement(cv2.MORPH_CROSS,(5, 5))  
  8. #菱形结构元素的定义稍麻烦一些  
  9. diamond = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5))  
  10. diamond[0, 0] = 0  
  11. diamond[0, 1] = 0  
  12. diamond[1, 0] = 0  
  13. diamond[4, 4] = 0  
  14. diamond[4, 3] = 0  
  15. diamond[3, 4] = 0  
  16. diamond[4, 0] = 0  
  17. diamond[4, 1] = 0  
  18. diamond[3, 0] = 0  
  19. diamond[0, 3] = 0  
  20. diamond[0, 4] = 0  
  21. diamond[1, 4] = 0  
  22. square = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5))  
  23. x = cv2.getStructuringElement(cv2.MORPH_CROSS,(5, 5))  
  24. #使用cross膨胀图像  
  25. result1 = cv2.dilate(image,cross)  
  26. #使用菱形腐蚀图像  
  27. result1 = cv2.erode(result1, diamond)  
  28.   
  29. #使用X膨胀原图像   
  30. result2 = cv2.dilate(image, x)  
  31. #使用方形腐蚀图像   
  32. result2 = cv2.erode(result2,square)  
  33.   
  34. #result = result1.copy()  
  35. #将两幅闭运算的图像相减获得角   
  36. result = cv2.absdiff(result2, result1)  
  37. #使用阈值获得二值图  
  38. retval, result = cv2.threshold(result, 40, 255, cv2.THRESH_BINARY)  
  39.   
  40. #在原图上用半径为5的圆圈将点标出。  
  41. for j in range(result.size):  
  42.     y = j / result.shape[0]   
  43.     x = j % result.shape[0]   
  44.   
  45.     if result[x, y] == 255:  
  46.         cv2.circle(image, (y, x), 5, (255,0,0))  
  47.   
  48. cv2.imshow("Result", image)  
  49. cv2.waitKey(0)  
  50. cv2.destroyAllWindows()  
#coding=utf-8
import cv2

image = cv2.imread("D:/building.jpg", 0)
origin = cv2.imread("D:/building.jpg")
#构造5×5的结构元素,分别为十字形、菱形、方形和X型
cross = cv2.getStructuringElement(cv2.MORPH_CROSS,(5, 5))
#菱形结构元素的定义稍麻烦一些
diamond = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5))
diamond[0, 0] = 0
diamond[0, 1] = 0
diamond[1, 0] = 0
diamond[4, 4] = 0
diamond[4, 3] = 0
diamond[3, 4] = 0
diamond[4, 0] = 0
diamond[4, 1] = 0
diamond[3, 0] = 0
diamond[0, 3] = 0
diamond[0, 4] = 0
diamond[1, 4] = 0
square = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5))
x = cv2.getStructuringElement(cv2.MORPH_CROSS,(5, 5))
#使用cross膨胀图像
result1 = cv2.dilate(image,cross)
#使用菱形腐蚀图像
result1 = cv2.erode(result1, diamond)

#使用X膨胀原图像 
result2 = cv2.dilate(image, x)
#使用方形腐蚀图像 
result2 = cv2.erode(result2,square)

#result = result1.copy()
#将两幅闭运算的图像相减获得角 
result = cv2.absdiff(result2, result1)
#使用阈值获得二值图
retval, result = cv2.threshold(result, 40, 255, cv2.THRESH_BINARY)

#在原图上用半径为5的圆圈将点标出。
for j in range(result.size):
	y = j / result.shape[0] 
	x = j % result.shape[0] 

	if result[x, y] == 255:
		cv2.circle(image, (y, x), 5, (255,0,0))

cv2.imshow("Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意,由于封装的缘故,OpenCV中函数参数中使用的坐标系和NumPy的ndarray的坐标系是不同的,在50行可以看出来。抽空我向OpenCV邮件列表提一下,看我的理解是不是正确的。

大家可以验证一下,比如在代码中插入这两行代码,就能知道结果了:

  1. cv2.circle(image, (5, 10), 5, (255,0,0))  
  2. image[5, 10] = 0  
cv2.circle(image, (5, 10), 5, (255,0,0))
image[5, 10] = 0
通过上面的代码就能检测到图像中的拐角并标出来,效果图如下:



当然,这只是个形态学处理示例,检测结果并不好。

未完待续...

在将来的某一篇文章中将做个总结,介绍下OpenCV中常用的函数,如threshold、bitwise_xxx,以及绘制函数等。

参考资料:

1、《Opencv2 Computer Vision Application Programming Cookbook》

2、《OpenCV References Manule》

如果觉得本文写的还可以的话,请轻点“顶”,方便读者、以及您的支持是我写下去的最大的两个动力。

【深度分析之OpenCV中的 -- > cv2.getStructuringElement()函数】 cv2.getStructuringElement() 是 OpenCV 中的一个函数,用于生成一个结构元素,这个结构元素主要用于形态学操作,如膨胀、腐蚀、开运算和闭运算。这些形态学操作在处理图像时特别有用,尤其是在去噪、边缘检测、填充孔洞等场景中。 阅读详情

相关推荐

29-OpenCVSharp —- Cv2.GetStructuringElement()函数功能(创建结构元素)详解

Cv2.GetStructuringElement() 是进行图像形态学处理的关键函数,帮助定义用于膨胀、腐蚀等操作的结构元素。通过合理设置结构元素的大小、形状和锚点,可以灵活地优化图像处理效果。与其他算法(如轮廓检测、Canny 边缘检测等)的配合使用,可以提高图像分割和特征提取的质量。

weixin_45590420的博客 1957

cv2.getStructuringElement()

cv2.getStructuringElement()介绍

camouflagerainy的博客 8785

简要介绍 | 基于Python的图像形态学处理概述

随着深度学习技术的发展,图像形态学处理也与深度学习相结合,实现了更高级的图像处理功能。由于Python语言的易用性和强大的生态系统,图像形态学处理在Python中得到了广泛的支持。注1:本文系“简要介绍”系列之一,仅从概念上对基于Python的图像形态学处理进行非常简要的介绍,不适合用于深入和详细的了解。,当结构元素与图像的对应区域完全重合时,将结果图像的对应像素值置为1。,当结构元素与图像的对应区域至少有一个像素值为1时,将结果图像的对应像素值置为1。梯度操作是膨胀操作后的图像与腐蚀操作后的图像之差。

NLOS的博客 2120

opencv中的cv2.getStructuringElement()

cv2.getStructuringElement( ) 返回指定形状和尺寸的结构元素。 这个函数的第一个参数表示内核的形状,有三种形状可以选择。 矩形:MORPH_RECT; 交叉形:MORPH_CROSS; 椭圆形:MORPH_ELLIPSE; 第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得 getSt...

liguandong 5万+

Python OpenCV形态学处理详解

这段代码首先将一张图片读取并转换为灰度图,然后定义一个3*3的矩形结构元素,并分别对原图进行了膨胀、腐蚀、开运算和闭运算操作。其中,膨胀操作可以使图像中的白色区域扩大,而腐蚀操作则相反,可以使白色区域缩小。Python OpenCV包含了许多形态学处理函数,其中最重要的包括膨胀、腐蚀、开运算和闭运算。通过使用结构元素和卷积核,我们可以进行各种形态学变换,从而实现对图像的精确控制和处理。除了上述介绍的四种操作外,Python OpenCV还支持更多形态学处理函数,如梯度、礼帽和黑帽等。

. 486

解决VNC Viewer连接Ubuntu桌面异常:从灰屏到完整菜单栏的实战指南

本文详细解析了使用VNC Viewer连接Ubuntu桌面时出现灰屏或菜单栏缺失的常见原因及解决方案。从桌面环境冲突到配置文件错误,提供了彻底清理系统残留配置、重新安装纯净桌面环境、优化xstartup文件配置等实战步骤,帮助用户快速恢复完整的远程桌面体验。

weixin_30892037的博客 83

【Python】OpenCV形态学处理

定义结构元素 形态学处理的核心就是定义结构元素,在OpenCV-Python中,可以使用其自带的getStructuringElement函数,也可以直接使用NumPy的ndarray来定义一个结构元素。首先来看用getStructuringElement函数定义一个结构元素: element = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)...

mjiansun的专栏 1789

PC微信逆向:破解聊天记录文件!_读取别人pc微信msg文件

本文详细介绍了PC版微信数据库的解密方法,总结了前人经验并补充了关键细节。通过OllyDbg调试工具从微信内存中获取32字节加密密钥,使用C++结合OpenSSL库实现解密程序。重点解决了开发环境配置问题,包括Visual Studio项目设置和OpenSSL库的版本适配,将原本固定的数据库路径改为参数化输入,提高了工具的通用性。该方案为电子取证中的微信数据提取提供了完整的技术路径,避免了研究者重复探索已解决的问题。

zz96405784848的博客 9771

Python OpenCV形态学处理和图像梯度

ddepth参数:一般在别的图像处理函数中,直接置为-1,表示处理成与原图像一样深度的图像,但是由于此函数处理过程中会出现负数,故与sobel算子一样,将它赋值为cv2.CV_64F。它需要两个输入,一个是我们的原始图像,第二个是决定操作性质的结构元素或内核。只有当内核下的所有像素都为 1 时,原始图像中的像素(1 或 0)才会被视为 1,否则会被侵蚀(变为零)。所以它会增加图像中的白色区域,或者增加前景对象的大小。五个参数分别表示:原图像1,原图像1的系数,原图像2,原图像2的系数,修正值。

余生的博客 1221

flowable表中文注释-表结构-主要表结构字段注释-sql脚本

flowable表结构中文注释,主要表结构字段注释,sql执行脚本,包含MySQL版和Oracle版sql脚本。

bushinakeshu的博客 1070

WiFi信道状态信息 基于Intel 5300的CSI Tool 安装及使用(一)

经过半个月的坎坷安装过程,连Windows系统都没装过的本人终于颤颤巍巍把CSI TOOL装好了,下面记录一下适于我所使用设备的安装过程。设备:一台THINKPAD X201,一台师兄借的华硕主板的台式机首先,如果你和我一样对linux其实一窍不通的话,建议先反复看教程里的安装代码,照猫画虎很难一步实现的,中途一定会有这或那的问题需要解决,所以该了解的基础linux指令还是要了解,起码安装过程中的那些指令可以去查一查。.........

Silver_777的博客 2万+

Python——OpenCV形态学处理(膨胀与腐蚀)

定义结构元素 形态学处理的核心就是定义结构元素,在OpenCV-Python中,可以使用其自带的getStructuringElement函数,也可以直接使用NumPy的ndarray来定义一个结构元素。 函数原型: Mat getStructuringElement(int shape, //核的形状 0:矩形 1:十字交叉形 2: 椭圆 ...

YBAdiam的博客 4858

2024最新版:MacOS Sonoma系统下CocoaPods安装全攻略(解决Ruby版本冲突)

本文详细介绍了在MacOS Sonoma系统下安装CocoaPods的全过程,重点解决Ruby版本冲突问题。通过HomeBrew安装最新Ruby版本,配置环境变量,并正确安装CocoaPods,帮助iOS开发者顺利管理项目依赖。文章还提供了常见问题的解决方案和优化配置建议,确保开发环境的稳定性和高效性。

lll78的博客 1042

OpenCV-Python教程(4、形态学处理)

提示: 转载请详细注明原作者及出处,谢谢! 本文介绍使用OpenCV-Python进行形态学处理本文不介绍形态学处理的基本概念,所以读者需要预先对其有一定的了解。 定义结构元素 形态学处理的核心就是定义结构元素,在OpenCV-Python中,可以使用其自带的getStructuringElement函数,也可以直接使用NumPy的ndarray来定义一个结构元素。首先来看用get

sunny2038的专栏 12万+

解决:请求的资源[/xxx/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

解决:请求的资源[/xxx/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

念兮为美 1万+

SAP 系统和银行系统通过 SM2 加密算法进行集成

SM2 是基于椭圆曲线离散对数问题(ECDLP)的一种公钥密码算法。椭圆曲线加密的核心原理,是利用了一个数学难题:在椭圆曲线群上,已知曲线上两点的运算结果,逆向推导出这两个点的具体信息是非常困难的。这样的复杂度使得基于椭圆曲线的密码体制比传统的 RSA 更加难以破解。在 SM2 加密中,公钥和私钥的生成与传统的椭圆曲线加密类似。选择一个椭圆曲线和一个基点 P。使用私钥 d,计算公钥 P’ = d * P。私钥 d 保密,而公钥 P’ 可公开分发,用于加密数据。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1212

OpenCV-Python中的图像处理-形态学转换

就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉(但是前景仍然是白色)。卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。根据卷积核的大小靠近前景的所有像素都会被腐蚀掉(变为 0),所以前景物体会变小,整幅图像的白色区域会减少。与腐蚀相反,与卷积核对应的原图像的像素值中只要有一个是 1,中心元素的像素值就是 1。下面的例子是用一个 9x9 的核进行礼帽操作的结果。其实就是一幅图像膨胀与腐蚀的差别,结果看上去就像前景物体的轮廓。

若有博文对您有帮助,欢迎点赞关注,收藏评论。 2175

CryoEM - 冷冻电镜 基于深度学习的 从头重构(Ab-initio Reconstruction) 开源项目 教程

冷冻电镜(CryoEM) 是一种成像方式,为蛋白质和其他生命基本组成部分的动态,提供独特的观察方式。从数百万噪声和随机取向的二维投影中,以计算效率高的方式,联合估计生物大分子的姿态、三维结构和构象异质性。

AGI 1559

Python调用OpenCV形态学

图像形态学处理包括腐蚀、膨胀、开运算、闭运算、形态学梯度、礼帽(顶帽)、黑帽等运算。 1、腐蚀 腐蚀可以理解为前景像素会被腐蚀为背景像素,以白色255为前景,得到的效果就是白色变小、变细,黑色变大变粗: importcv2 importnumpyasnp img=cv2.imread('lena.jpg',0) kernel=np.ones((5,5),np.uint...

上善若水,为而不争 371

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OpenCV学习记录——形态学处理

形态学是图像处理中最常用的技术之一,它主要用于从图像中提取有意义的形状信息,例如边界和连通区域,以便后续的识别工作能够捕捉到目标对象最重要的形状特征。此外,细化、像素化和修剪毛刺等技术也常用于图像的预处理和后处理,以增强图像质量。形态学转换主要有腐蚀和膨胀开运算和闭运算顶帽和底帽。

KAI的博客 1547

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Opencv Python图像处理笔记二:图像变换、卷积、形态学变换

图像处理是计算机视觉领域中的核心技术之一,它涉及到对图像进行各种变换、滤波、金字塔构建、形态学操作等一系列处理。在本篇博文中,我们将深入探讨使用OpenCV和Python进行图像处理的各种技术和方法。从几何变换到滤波、金字塔构建再到形态学操作,我们将逐步介绍并实践这些重要的图像处理技术,帮助读者更好地理解和应用于实际项目中。# 自定义滤波,对图像进行卷积运算:# 先定义卷积核,再参与计算,ddepth=-1表示和源图像深度一致# 此外还有个参数anchor,默认值为(-1,-1)表示锚点位于内核中心。

十十办文武的博客 1304

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OPENCV学习指南——形态学分析

图像形态学是一种基于形态结构元素对图像进行分析和处理的方法,主要用于处理二值图像,也可扩展到灰度图像和彩色图像。它的核心思想是利用结构元素与图像进行卷积操作,通过对图像中物体的形状、大小和位置进行调整,实现图像的去噪、分割、骨架提取等功能。形态学操作基于集合论,将图像看作是由像素点组成的集合,通过结构元素对集合进行膨胀、腐蚀等操作,从而改变图像的形态。

m0_74128723的博客 618

【OpenCv 4 Python 3.7】图像形态学操作之顶帽、黑帽、形态学梯度

1、 顶帽 是原图像与开操作之间的差值图像 开操作先腐蚀后膨胀,开操作之后就只剩下白色的矩形,原图减去矩形就是下面的。。 2、黑帽 是闭操作图像与源图像的差值图像 3、形态学梯度  基本梯度 基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值 图像,称为梯度图像也是opencv中支持的计算形态学 梯度的方法,而此方法得到梯度有被称为基本梯度。  内部梯度 是用原图像减去腐蚀之后的图像得到差值图像,称为图 像的内部梯度  外部梯度 图像膨胀之后再减去原来的图像得到的差值图像,称为 图像的外部梯度 代码

java_pythons的博客 878

【形态学滤波】——腐蚀和膨胀

本篇文章主要用于记录python调用opencv实现图像膨胀与腐蚀的算法,以及相关的知识点。 一、基础理论 二、图像腐蚀代码 三、图像膨胀代码 四、形态学处理图像常规操作 一、基础理论 1、形态学概述 图像处理中的形态学往往指的是数学形态学。 2、数学形态学 建立在格论和拓扑学基础之上的图像分析学科,是数字形态学图像图像处理的基本理论。 其基本的运算包括二值化腐蚀和膨胀、二值开闭...

yxdd1gbk的博客 8178

OpenCV图像处理应用(面向Python)之形态学操作

这里写自定义目录标题欢迎来到梁老湿课堂1.腐蚀2.膨胀3.通用形态学函数3.1开运算3.2闭运算3.3梯度运算3.4顶帽运算3.5黑帽运算3.6通用形态学函数总结4.核函数多练多学多坚持,我们下期再见。 欢迎来到梁老湿课堂 1.腐蚀 首先得先了解什么是形态学?形态学,即数学形态学(Mathematical Morphology),是图像处理过程中一个非常重要的研究方向。 目的: 提取图像分量信息最本质的形状特征。 重点: 腐蚀与膨胀。 难点: 梯度运算、形态学应用。 腐蚀: 1.将图像的边界点消除,使图像沿

weixin_52272597的博客 1486
上一篇: 今天的但我发现了幸福的超级玛丽,白萝卜的种子
下一篇: 对字符串进行 匹配,查找,替换,判断。
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值