【机器视觉】OpenCV-Python 图像的形态学操作

简介: 【机器视觉】OpenCV-Python 图像的形态学操作
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 设置兼容中文
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
  warnings.warn("loaded more than 1 DLL from .libs:\n%s" %


rain = cv.imread('img/rain.jpg')[:500,:500,:]
view = cv.imread('img/view.jpg')
letter = cv.imread('img/letter.png')
plt.figure()
plt.subplot(1,3,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title('rain.jpg')
plt.subplot(1,3,2)
m2 = plt.imshow(view[:,:,::-1])
plt.title('view.jpg')
plt.subplot(1,3,3)
m2 = plt.imshow(letter[:,:,::-1])
plt.title('letter.jpg')
Text(0.5, 1.0, 'letter.jpg')




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dIQEKGsZ-1637754238885)(output_2_1.png)]

1.腐蚀与膨胀

# 创建核结构 5*5
kenel = np.ones((5,5),np.uint8)
kenel
array([[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]], dtype=uint8)



# 腐蚀
img1 = cv.erode(letter,kenel)
# 膨胀
img2 = cv.dilate(letter,kenel)
plt.figure()
plt.subplot(1,3,1)
m1 = plt.imshow(letter[:,:,::-1])
plt.title('原图')
plt.subplot(1,3,2)
m2 = plt.imshow(img1[:,:,::-1])
plt.title('腐蚀')
plt.subplot(1,3,3)
m3 = plt.imshow(img2[:,:,::-1])
plt.title('膨胀')
Text(0.5, 1.0, '膨胀')




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uFue5OKs-1637754238887)(output_6_1.png)]

2.开闭运算

letter_open = cv.imread('img/letter_open.png')
letter_close = cv.imread('img/letter_close.png')
# 核结构
kenel = np.ones((10,10),np.uint8)
kenel
array([[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, 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],
       [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, 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]], dtype=uint8)



# 开运算 先腐蚀再膨胀 消除主要图像外面的噪点
cv_open = cv.morphologyEx(letter_open,cv.MORPH_OPEN,kenel)
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(letter_open[:,:,::-1])
plt.title('原图')
plt.subplot(1,2,2)
m2 = plt.imshow(cv_open[:,:,::-1])
plt.title('开运算后')
Text(0.5, 1.0, '开运算后')




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hQzX0MJ-1637754238889)(output_10_1.png)]

# 闭运算 先膨胀再腐蚀 消除主要图像内部的噪点
cv_close = cv.morphologyEx(letter_close,cv.MORPH_CLOSE,kenel)
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(letter_close[:,:,::-1])
plt.title('原图')
plt.subplot(1,2,2)
m2 = plt.imshow(cv_close[:,:,::-1])
plt.title('闭运算后')
Text(0.5, 1.0, '闭运算后')




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qP3R8eUw-1637754238891)(output_11_1.png)]

3.礼帽和黑帽运算

# 核结构
kenel = np.ones((10,10),np.uint8)
kenel
array([[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, 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],
       [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, 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]], dtype=uint8)



# 礼帽 原图减去开运算结果图 作用是突出较亮的部分
top = cv.morphologyEx(letter_open,cv.MORPH_TOPHAT,kenel)
# 可视化
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(letter_open[:,:,::-1])
plt.title('原图')
plt.subplot(1,2,2)
m2 = plt.imshow(top[:,:,::-1])
plt.title('礼帽后')
Text(0.5, 1.0, '礼帽后')




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SrX4DOta-1637754238892)(output_14_1.png)]

# 黑帽 闭运算结果图减去原图 作用是突出较暗的部分
black = cv.morphologyEx(letter_close,cv.MORPH_BLACKHAT,kenel)
# 可视化
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(letter_close[:,:,::-1])
plt.title('原图')
plt.subplot(1,2,2)
m2 = plt.imshow(black[:,:,::-1])
plt.title('黑帽后')
Text(0.5, 1.0, '黑帽后')




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xFQP6sML-1637754238893)(output_15_1.png)]

目录
相关文章
|
11天前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
107 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
1月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
73 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
1月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
39 4
|
18天前
|
存储 JSON API
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
24 7
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
|
1月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
96 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
1月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
86 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
29天前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
使用Python和TensorFlow实现图像识别
【8月更文挑战第31天】本文将引导你了解如何使用Python和TensorFlow库来实现图像识别。我们将从基本的Python编程开始,逐步深入到TensorFlow的高级功能,最后通过一个简单的代码示例来展示如何训练一个模型来识别图像。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
148 53
|
13天前
|
JSON API 数据格式
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
34 0
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
|
1月前
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
在数据驱动时代,数据分析至关重要,但单纯依赖数据表格难以揭示其背后的洞见。这时,数据可视化便彰显出其重要性,尤其借助 Python 的强大工具如 Matplotlib、Seaborn 和 Plotly 等,可将数据转化为直观的图形。Matplotlib 提供高度定制的图表,Seaborn 则简化了图表美化过程。通过折线图、散点图、箱线图、小提琴图及热力图等多种图表形式,我们可以更深入地理解数据分布与关系,有效传达信息并支持决策制定。数据可视化不仅是一门技术,更是讲述数据故事的艺术。
46 3