# 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

## 一.图像顶帽运算

[En]

The image cap operation uses a structural element to remove an object from an image through an open operation to correct the influence of uneven illumination, and the effect is shown in the following image.

dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

• src表示原始图像
• cv2.MORPH_TOPHAT表示图像顶帽运算
• kernel表示卷积核，可以用numpy.ones()函数构建

#encoding:utf-8import cv2  import numpy as np  #读取图片src = cv2.imread('test06.png', cv2.IMREAD_UNCHANGED)#设置卷积核kernel = np.ones((10,10), np.uint8)#图像顶帽运算result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)#显示图像cv2.imshow("src", src)cv2.imshow("result", result)#等待显示cv2.waitKey(0)cv2.destroyAllWindows()


[En]

The operation results are as follows, and it effectively separates the rice grain from the background.

## 二.图像黑帽运算

[En]

The image bottom cap operation uses a structural element to delete an object from an image through a closed operation, which is often used to correct the influence of uneven illumination. The effect picture is shown in the following figure.

dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

• src表示原始图像
• cv2.MORPH_BLACKHAT表示图像底帽或黑帽运算
• kernel表示卷积核，可以用numpy.ones()函数构建

Python实现图像底帽运算的代码如下所示：

#encoding:utf-8import cv2  import numpy as np  #读取图片src = cv2.imread('test06.png', cv2.IMREAD_UNCHANGED)#设置卷积核kernel = np.ones((10, 10), np.uint8)#图像黑帽运算result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)#显示图像cv2.imshow("src", src)cv2.imshow("result", result)#等待显示cv2.waitKey(0)cv2.destroyAllWindows()


## 三.基于灰度三维图的顶帽黑帽运算

-*- coding: utf-8 -*-import numpy as npimport cv2 as cvimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatter#读取图像img = cv.imread("test06.png")img = cv.cvtColor(img,cv.COLOR_BGR2GRAY)imgd = np.array(img) #image类转numpy#准备数据sp = img.shapeh = int(sp[0]) #图像高度(rows)w = int(sp[1]) #图像宽度(colums) of image#绘图初始处理fig = plt.figure(figsize=(16,12))ax = fig.gca(projection="3d")x = np.arange(0, w, 1)y = np.arange(0, h, 1)x, y = np.meshgrid(x,y)z = imgdsurf = ax.plot_surface(x, y, z, cmap=cm.coolwarm) #自定义z轴ax.set_zlim(-10, 255)ax.zaxis.set_major_locator(LinearLocator(10)) #设置z轴网格线的疏密#将z的value字符串转为float并保留2位小数ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # 设置坐标轴的label和标题ax.set_xlabel('x', size=15)ax.set_ylabel('y', size=15)ax.set_zlabel('z', size=15)ax.set_title("surface plot", weight='bold', size=20)#添加右侧的色卡条fig.colorbar(surf, shrink=0.6, aspect=8) plt.show()


[En]

The trend of the pixels in the image shows that the image is affected by the uneven illumination of each part, which results in the uneven grayscale of the background, in which the depression corresponds to the region with relatively small gray value in the image. The code of the grayscale 3D image after the image white hat operation is as follows:

-*- coding: utf-8 -*-import numpy as npimport cv2 as cvimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatter#读取图像img = cv.imread("test06.png")img = cv.cvtColor(img,cv.COLOR_BGR2GRAY)#图像黑帽运算kernel = np.ones((10,10), np.uint8)result = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)#image类转numpyimgd = np.array(result) #准备数据sp = result.shapeh = int(sp[0]) #图像高度(rows)w = int(sp[1]) #图像宽度(colums) of image#绘图初始处理fig = plt.figure(figsize=(8,6))ax = fig.gca(projection="3d")x = np.arange(0, w, 1)y = np.arange(0, h, 1)x, y = np.meshgrid(x,y)z = imgdsurf = ax.plot_surface(x, y, z, cmap=cm.coolwarm) #自定义z轴ax.set_zlim(-10, 255)ax.zaxis.set_major_locator(LinearLocator(10)) #设置z轴网格线的疏密#将z的value字符串转为float并保留2位小数ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # 设置坐标轴的label和标题ax.set_xlabel('x', size=15)ax.set_ylabel('y', size=15)ax.set_zlabel('z', size=15)ax.set_title("surface plot", weight='bold', size=20)#添加右侧的色卡条fig.colorbar(surf, shrink=0.6, aspect=8) plt.show()


[En]

The effect image is shown below, and the corresponding grayscale is more concentrated in the range of 10 to 100, which proves that the uneven background is roughly eliminated, which is beneficial to the subsequent threshold segmentation or image segmentation.

Original: https://blog.51cto.com/u_15214399/5586000
Author: 华为云开发者联盟
Title: 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

(0)

### 大家都在看

• #### django环境配置+基础语法+小案例

目录 环境配置 pycharm 默认文件功能介绍 APP 启动运行django 在settings中启动 编写url和函数视图的对应关系和视图函数 templates目录 模板和静…

Python 2023年8月4日
0117
• #### Asp.NetCore利用缓存使用AOP方式防止重复提交

为什么要用？ 有些时候经常会遇到重复提交的问题，为了避免这个问题，可以使用缓存锁的方式，主要是利用存取缓存比较快的原理。 当提交某个操作的时候，第一次提交会创建一个缓存，当有相同提…

Python 2023年6月12日
0118
• #### Scrapy-网易新闻模块爬取

需求 首先明确需求：爬取网易新闻新闻的标题和新闻详情页的内容注意项： 先从首页获取对应的详情页的url 每一个模块的新闻都是动态加载出来的，可配合selenium实现动态加载 详情…

Python 2023年10月2日
0104
• #### python中关于txt文件的处理（读取、写入、csv文件转为txt）

Python 2023年8月27日
0103
• #### Django中render、render_to_response、HttpResponse、JsonResponse、Response的使用

Django作为一个后台框架，如何将数据正确的传递给前端呢？这得根据前端不同的数据请求方式，正确的使用render、render_to_response、HttpResponse、…

Python 2023年8月6日
0118
• #### scrapy框架入门和使用实践

文章目录 scrapy框架入门和使用实践 * 一、前言 二、正文 1.架构简介 2.使用实践 – 1）创建项目 2）配置文件 3）请求及解析 4）数据存储 5）隐藏身份…

Python 2023年10月4日
098
• #### 【JS逆向百例】某音乐网分离式 webpack 非 IIFE 改写实战

关注微信公众号：K哥爬虫，QQ交流群：808574309，持续分享爬虫进阶、JS/安卓逆向等技术干货！ 声明 本文章中所有内容仅供学习交流，抓包内容、敏感网址、数据接口均已做脱敏处…

Python 2023年5月25日
0160

Gunicorn”绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器，移植自Ruby的独角兽（Unicorn ）项目,使…

Python 2023年8月13日
094
• #### Django里HTML页面共用导航栏和底部申明栏

Python 2023年8月6日
0118
• #### 商品期货重点配对价差的月度效应

更多精彩内容， 欢迎关注公众号：数量技术宅，也可添加技术宅 个人微信号：sljsz01，与我交流。 如何选择配对品种 目前在商品期货市场，上市品种活跃品种也越来越多。我们知道，商品…

Python 2023年6月3日
0162
• #### 【RocketMQ】主从模式下的消费进度管理

在【RocketMQ】消息的拉取一文中可知，消费者在启动的时候，会创建消息拉取API对象 PullAPIWrapper，调用pullKernelImpl方法向Broker发送拉取消…

Python 2023年10月12日
0161
• #### 【Docker】Docker双容器部署Nginx+uWSGI+django -20220804

参考大江狗文章 https://blog.csdn.net/weixin_42134789/article/details/106345938 效果：docker双容器部署Ngin…

Python 2023年8月4日
0122
• #### python plot函数label_python – Matplotlib Contour Clabel位置

不,matplotlib没有办法做到这一点.您应该使用默认位置,或者使用手动和使用鼠标进行完全交互. 您可能希望将此文件作为上游​​错误报告提交,以便他们可以改进其算法. 有多种方…

Python 2023年9月6日
0104
• #### python pytest测试框架实现一些前后置处理，常用三种

好久不见，我又回来了！！ 废话不说干货满满 一、setup/teardow,setup_class/teardown_class 为什么需要这些功能？ 比如：web自动化执行用例之…

Python 2023年9月11日
092
• #### RGB-T追踪——【数据集基准】GTOT / RGBT210 / RGBT234 / VOT-2019-2020 / LasHeR / VTUAV

目录 论文链接 数据集简介 * GTOT RGBT210 RGBT234 VOT2019/2020 LasHeR VTUAV 数据集属性详解 数据集对比 论文链接 GTOT：论文 …

Python 2023年10月9日
099
• #### 1.Django安装与简单使用

文章目录 * – + 1. Python三大主流框架 + 2. MVC / MTV模式 + 3. Django简介&安装 + * 3.1 版本 * 3.2 兼容…

Python 2023年8月10日
0102