python + opnencv实现图像孔洞填充

import cv2import numpy as np

path = "_holefill.jpg"img = cv2.imread(path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#转换成灰度图ret, thresh = cv2.threshold(gray, 50, 250, cv2.THRESH_BINARY_INV)#灰度图转换成二值图像thresh_not = cv2.bitwise_not(thresh)#二值图像的补集

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))#3×3结构元

"""构建阵列F,并将thresh_not边界值写入F"""F = np.zeros(thresh.shape, np.uint8)F[:, 0] = thresh_not[:, 0]F[:, -1] = thresh_not[:, -1]F[0, :] = thresh_not[0, :]F[-1, :] = thresh_not[-1, :]

"""循环迭代,对F进行膨胀操作,结果与thresh_not执行and操作"""for i in range(200):    F_dilation = cv2.dilate(F, kernel, iterations=1)    F = cv2.bitwise_and(F_dilation, thresh_not)

result = cv2.bitwise_not(F)#对结果执行not

#显示结果cv2.imshow(‘p‘,result)cv2.imshow(‘r‘,thresh)cv2.waitKey(0)



原文地址:https://www.cnblogs.com/er-gou-zi/p/11831222.html

时间: 2024-11-09 06:06:22

python + opnencv实现图像孔洞填充的相关文章

Python对DICOM图像进行阈值分割

Python对Dicom图像进行处理,离不开pydicom,opencv-python,matplotlib,numpy四个代码库,安装完成这四个代码库后, 可以读取Dicom图像,并对图像进行处理,显式处理后的结果,下面就举例说明: import cv2 import numpy import dicom from matplotlib import pyplot as plt # 读取单张Dicom图像 dcm = dicom.read_file("../Data/vhm.420.dcm&q

Android ImageButton图像完全填充缩放到控件

如果你发现你写程序的时候像我一样,发现图片怎么都无法拉伸填充到ImageButton 里面.而且就算能缩放到控件,但是图像较小,而且总会在 ImageButton周围有一圈边框!当你遇到这一些列问题的这时候你就可以收藏并吸收这个经验了. 总的过程:我先给出关键代码→ 分析给出的两种解决方案→ 我详细介绍一下边框出现的原因个解决办法.→ 最后就是些注意事项了 工具/原料 遇到问题尽可能冷静下来的心情. 记住收藏好我这条经验. ImageButton的长宽最好是固定的.注意事项里面我会告诉你为什么

用numpy.pad()对图像进行填充及简单的图像处理

三.用numpy.pad()对图像进行填充及简单的图像处理 https://blog.csdn.net/wang454592297/article/details/80854996 一.用numpy.pad()对图像进行填 我们都知道在css的盒子模型中,有padding(内边距)这一属性.同css中的padding类似,在numpy中,numpy.pad()可以跟矩阵添加内边距,这一方法在CNN中的卷积层可以用到,可以影响到卷积后矩阵的维度,其用法如下: numpy.pad(array, pa

Opencv图像识别从零到精通(24)------漫水填充,种子填充,区域生长、孔洞填充

可以说从这篇文章开始,就结束了图像识别的入门基础,来到了第二阶段的学习.在平时处理二值图像的时候,除了要进行形态学的一些操作,还有有上一节讲到的轮廓连通区域的面积周长标记等,还有一个最常见的就是孔洞的填充,opencv这里成为漫水填充,其实也可以叫种子填充,或者区域生长,基本的原理是一样的,但是应用的时候需要注意一下,种子填充用递归的办法,回溯算法,漫水填充使用堆栈,提高效率,同时还提供了一种方式是扫描行.经常用来填充孔洞,现在来具体看看. 漫水填充:也就是用一定颜色填充联通区域,通过设置可连通

python二维图像输出操作大全(非常全)!

//2019.07.141.matplotlib模块输出函数图像应用时主要用的是它的ptplot模块,因此在导入使用该模块时可以直接用以下语句:import matplotlib.pyplot as plt2.matplotlib模块输出图线时它得到坐标轴数值以及标题正常默认是英文形式,而如果需要在转换成为中文形式并且需要正常输出负号则需要用以下两句python语句设置一下,这样便可以正常输出中英文两种形式标题与带负号的坐标数值:plt.rcParams["font.sans-serif&quo

matplotlib 画封闭图像并填充

1.画矩形 这个费了我半天劲,不知怎么就可以了. 复制来自:https://www.cnblogs.com/ymjyqsx/p/7390288.html import  matplotlib.pyplot  as plt fig = plt.figure()ax = fig.add_subplot(111)   #创建子图,为什么要这样创建,不明白 rect = plt.Rectangle((0.1,0.2),0.4,0.3, color="red")    # (0.1,0.2)为左

opencv python:ROI 与 泛洪填充

提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ONLY 选项说明: cv2.FLOODFILL_FIXED_RANGE:改变图像,泛洪填充 cv2.FLOODFILL_MASK_ONLY:不改变图像,只填充遮罩层本身,忽略新的颜色值参数 import cv2 import numpy as np # 读取一张图片 src = cv2.imread(

Python OpenCV 实现图像滤波

一.实验过程 我使用的是python语言+openCV来实现图像滤波. 使用imread()函数读取图片,使用imshow()函数显示图片,waitKey()函数含义为按下任意键继续: 代码示例: img = cv2.imread("photo1.bmp") cv2.imshow("img",img) cv2.waitKey(0) 结果: 我们可以用pil来实现在图片上显示文字,首先先安装pillow 实例代码: #cv2和PIL中颜色的hex码的储存顺序不同,需转

Python+OpenCV实现图像边缘提取、图像滤波功能

在Jupyter Notebook上使用Python实现下述代码的边缘提取.图像滤波功能,这个过程中实现某些功能处理出来的图像可能会有点粗糙.关于opencv库的安装可以参考:Python下opencv库的安装过程与一些问题汇总. 一.边缘提取 import cv2#导入opencv库 #读取原灰度图片 image=cv2.imread("test.bmp") cv2.imshow("image", image)#将原图片命名为“image”显示出来 #图像的阈值分