当前位置: 首页 > news >正文

互联网网站界面设计 要素建筑行业

互联网网站界面设计 要素,建筑行业,公司网站页面设计,网络营销有什么目录 一、基础形态学操作及代码实现 1.图像腐蚀 2.图像膨胀 3.开运算与闭运算 4.梯度运算 5.顶帽和黑帽 二、形态学操作的扩展应用与参数调整 1.结构元素的多样化选择 2.形态学操作的链式应用 3.迭代次数对结果的影响 4.二值图像与灰度图像的处理差异 三、总结与实践…

目录

一、基础形态学操作及代码实现

1.图像腐蚀

2.图像膨胀

3.开运算与闭运算

4.梯度运算

5.顶帽和黑帽

二、形态学操作的扩展应用与参数调整

1.结构元素的多样化选择

2.形态学操作的链式应用

3.迭代次数对结果的影响

4.二值图像与灰度图像的处理差异

三、总结与实践建议


一、核心概念:结构元素(Kernel)

结构元素是形态学操作的 "工具",通常是一个由 0 和 1 组成的矩阵(如 3×3、4×4 的矩形)。操作时,结构元素会遍历图像的每个像素,根据结构元素与对应区域像素的关系(完全覆盖、部分覆盖等)决定输出像素的值。


二、基础形态学操作及代码实现

1.图像腐蚀

原理
腐蚀操作会使前景物体边界向内收缩。其核心逻辑是:用结构元素遍历图像,当结构元素的所有像素都完全处于前景区域(即结构元素与前景完全重叠)时,才保留结构元素中心位置的像素为前景;否则将该像素设为背景。

效果:可消除小噪声、断开细连接、减小物体尺寸。

代码实现

import cv2
import numpy as np# 腐蚀函数:cv2.erode(src, kernel, dst, anchor, iterations, borderType, borderValue)
# 参数说明:
# src: 输入图像
# kernel: 结构元素,若为Mat()则默认3×3矩形
# iterations: 迭代次数,次数越多腐蚀效果越明显sun = cv2.imread('sun.png')
cv2.imshow('src', sun)
cv2.waitKey(0)kernel = np.ones((4, 4), np.uint8)  # 定义4×4结构元素
erosion_1 = cv2.erode(sun, kernel, iterations=2)  # 迭代2次腐蚀
cv2.imshow('erosion_1', erosion_1)
cv2.waitKey(0)
src
erosion_1

2.图像膨胀

原理
膨胀与腐蚀相反,会使前景物体边界向外扩张。核心逻辑是:用结构元素遍历图像,当结构元素与前景区域有任何重叠(即结构元素至少有一个像素落在前景中)时,就将结构元素中心位置的像素设为前景。

效果:可填补小缝隙、连接断开的物体、增大物体尺寸。

代码实现

# 膨胀函数:cv2.dilate(img, kernel, iteration)
# 参数说明:
# img: 目标图片
# kernel: 操作内核,默认3×3矩阵
# iterations: 膨胀次数,默认1wenzi = cv2.imread('wenzi.png')
cv2.imshow('src1', wenzi)
cv2.waitKey(0)kernel = np.ones((4, 4), np.uint8)  # 定义4×4结构元素
wenzi_new = cv2.dilate(wenzi, kernel, iterations=2)  # 迭代2次膨胀
cv2.imshow('wenzi_new', wenzi_new)
cv2.waitKey(0)
src1
wenzi_new

3.开运算与闭运算

  • 开运算:先腐蚀后膨胀,用于平滑轮廓、断开窄颈、消除细突起
  • 闭运算:先膨胀后腐蚀,用于弥合间断、消除孔洞、填补轮廓断裂
# 开运算示例(指纹去噪)
zhiwen = cv2.imread('zhiwen.png')
cv2.imshow('src2', zhiwen)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)  # 2×2结构元素
zhiwen_open = cv2.morphologyEx(zhiwen, cv2.MORPH_OPEN, kernel)  # 开运算
cv2.imshow('zhiwen_open', zhiwen_open)
cv2.waitKey(0)# 闭运算示例(指纹补全)
zhiwen_duan = cv2.imread('zhiwen_duan.png')
cv2.imshow('src3', zhiwen_duan)
cv2.waitKey(0)kernel = np.ones((4, 4), np.uint8)  # 4×4结构元素
zhiwen_close = cv2.morphologyEx(zhiwen_duan, cv2.MORPH_CLOSE, kernel)  # 闭运算
cv2.imshow('zhiwen_close', zhiwen_close)
cv2.waitKey(0)
src2
zhiwen_open
src3
zhiwen_close

4.梯度运算

梯度运算 = 膨胀结果 - 腐蚀结果,用于突出图像中强度变化剧烈的区域(提取边缘)。

wenzi = cv2.imread('wenzi.png')
cv2.imshow('wenzi_original', wenzi)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)  # 2×2结构元素# 单独展示膨胀和腐蚀结果
pz_wenzi = cv2.dilate(wenzi, kernel, iterations=1)
cv2.imshow('dilated', pz_wenzi)
cv2.waitKey(0)fs_wenzi = cv2.erode(wenzi, kernel, iterations=1)
cv2.imshow('eroded', fs_wenzi)
cv2.waitKey(0)# 梯度运算提取边缘
bianyuan = cv2.morphologyEx(wenzi, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('edge_gradient', bianyuan)
cv2.waitKey(0)
wenzi_original
dilated
eroded
edge_gradient

5.顶帽和黑帽

  • 顶帽:原始图像 - 开运算结果,用于提取图像中比周围亮的细节
  • 黑帽:闭运算结果 - 原始图像,用于提取图像中比周围暗的细节
sun = cv2.imread('sun.png')
cv2.imshow('sun_original', sun)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)  # 2×2结构元素# 开运算结果
open_sun = cv2.morphologyEx(sun, cv2.MORPH_OPEN, kernel)
cv2.imshow('open_sun', open_sun)
cv2.waitKey(0)# 顶帽运算
tophat = cv2.morphologyEx(sun, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('TOPHAT', tophat)
cv2.waitKey(0)# 闭运算结果
close_sun = cv2.morphologyEx(sun, cv2.MORPH_CLOSE, kernel)
cv2.imshow('close_sun', close_sun)
cv2.waitKey(0)# 黑帽运算
blackhat = cv2.morphologyEx(sun, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('BLACKHAT', blackhat)
cv2.waitKey(0)cv2.destroyAllWindows()
sun_original
open_sun
TOPHAT
close_sun
BLACKHAT

三、形态学操作的扩展应用与参数调整

1.结构元素的多样化选择

除了代码中使用的矩形结构元素,OpenCV 还支持自定义形状:

# 矩形结构元素(默认)
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
# 十字形结构元素(对线性特征敏感)
cross_kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))
# 椭圆形结构元素(平滑处理曲线)
ellipse_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))print("矩形核:\n", rect_kernel)
print("十字核:\n", cross_kernel)
print("椭圆核:\n", ellipse_kernel)
矩形核:[[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]]
十字核:[[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]]
椭圆核:[[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]]

2.形态学操作的链式应用

组合多种操作处理复杂图像,例如先去噪再提取边缘:

def add_peppersalt_noise(image, n=10000):result = image.copy()h, w = image.shape[:2]  # 获取图片的高和宽for i in range(n):  # 生成n个椒盐噪声x = np.random.randint(low=1, high=h)y = np.random.randint(low=1, high=w)if np.random.randint(low=0, high=2) == 0:result[x, y] = 0else:result[x, y] = 255return resultnoise_image = cv2.imread('../opencv/sun.png')
cv2.imwrite('noise.png', add_peppersalt_noise(noise_image))
# 读取带噪声的图像
noise_img = cv2.imread('noise.png', 0)  # 灰度图读取
cv2.imshow('带噪声原图', noise_img)
cv2.imwrite('noise_img.png', noise_img)
cv2.waitKey(0)# 1. 开运算去噪
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
denoised = cv2.morphologyEx(noise_img, cv2.MORPH_OPEN, kernel)
cv2.imshow('去噪后', denoised)
cv2.imwrite('denoised.png', denoised)
cv2.waitKey(0)# 2. 梯度运算提取边缘
edge = cv2.morphologyEx(denoised, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('提取的边缘', edge)
cv2.imwrite('edge.png', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
带噪声原图
去噪后
提取的边缘

3.迭代次数对结果的影响

迭代次数直接影响操作强度:

img = cv2.imread('../opencv/sun.png', 0)
kernel = np.ones((3, 3), np.uint8)# 不同迭代次数的腐蚀效果
erosion_1 = cv2.erode(img, kernel, iterations=1)
erosion_7 = cv2.erode(img, kernel, iterations=7)
erosion_15 = cv2.erode(img, kernel, iterations=15)cv2.imshow('迭代1次', erosion_1)
cv2.imwrite('erosion1.jpg', erosion_1)
cv2.imshow('迭代7次', erosion_7)
cv2.imwrite('erosion7.jpg', erosion_7)
cv2.imshow('迭代15次', erosion_15)
cv2.imwrite('erosion15.jpg', erosion_15)
cv2.waitKey(0)
cv2.destroyAllWindows()
迭代1次
迭代7次
迭代15次

现象:迭代次数越多,前景收缩越明显(腐蚀)或扩张越显著(膨胀)。

4.二值图像与灰度图像的处理差异

  • 二值图像(0 和 255):直接改变前景与背景分布,效果最明显
  • 灰度图像:基于灰度值操作(腐蚀取最小值,膨胀取最大值)
# 灰度图膨胀示例
gray_img = cv2.imread('gray_image.png', 0)
kernel = np.ones((3, 3), np.uint8)
gray_dilate = cv2.dilate(gray_img, kernel, iterations=1)cv2.imshow('灰度原图', gray_img)
cv2.imshow('灰度膨胀后', gray_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()
灰度原图
灰度膨胀后

四、总结与实践建议

  1. 参数调试:从 3×3 结构元素和 1-5 次迭代开始尝试,避免过度处理
  2. 场景匹配
    • 去噪 → 开运算
    • 补全轮廓 → 闭运算
    • 提取边缘 → 梯度运算
    • 提取亮 / 暗细节 → 顶帽 / 黑帽
  3. 技术结合:常与阈值分割(cv2.threshold())配合,先二值化再处理可提升效果
http://www.dtcms.com/a/576317.html

相关文章:

  • 建设银行网站怎样查询贷款信息查询js制作网页游戏
  • 现在的网站建设用什么语言wordpress建站主题
  • 周浦网站建设公司广州推广广告
  • 在谷歌上网站推广电子商务网站建设与管理的书
  • 在微信公众号发布wordpress网站优化北京
  • 郴州公司网站建设女的和男做那个视频网站
  • 网站每天1万ip能收入多少做网站,用什么做数据库最好
  • 专题探索网站开发教学模式的结构嵌入式软件开发兼职
  • 做网站的后台开发需要会些什么网站开发资金预算
  • 淘宝客网站备案信息网站的建设与应用
  • 西安公司网站如何建设申请企业邮箱步骤是什么?
  • 做网站的女生多么非寻服饰网站建设规划书
  • 网站开发专业有哪些申请商标注册
  • 建站公司外包企业邮箱有哪几种
  • 微官网与网站的区别wordpress 外贸 主题
  • 马鞍山网站建设方案佛山网站建设哪家公司好
  • 旅游网站开发参考文献汽车网站建设页面
  • 网站wordpresssaas小程序
  • 如何向alexa提交网站线下推广的渠道和方法
  • 房地产网页设计网站建设中国国家商标注册网官网
  • 网站建设公司彩铃网站建设公司收费
  • 如何制作自己的网站链接视频wordpress 下雪
  • 天津最好网站建设公司python做网站好不好
  • 网站建设公司有wordpress 获取自定义字段值
  • 做复印机的模板网站化妆品网站建设网站
  • 网站建设图片如何循环转衡水做网站推广
  • oracle自带网站开发移动端网站建设费用
  • wordpress4.9+多站点东莞房价排名
  • 江宁区住房与城乡建设局网站外贸出口营销网站
  • 东莞在线网站制作平台做网站有2个前提条件_一个是网站