国税局网站里打印设置如何做网站建设费用推荐网络
- 作者: 五速梦信息网
- 时间: 2026年04月20日 11:02
当前位置: 首页 > news >正文
国税局网站里打印设置如何做,网站建设费用推荐网络,引导式网站,wordpress 作者 评论原理
泛洪填充算法和分水岭算法是图像处理中的两种重要算法#xff0c;主要用于区域分割#xff0c;但它们的原理和应用场景有所不同#xff0c;但是他们的基础思想都是基于区域迭代实现的区域之间的划分。
泛洪算法
泛洪填充算法#xff08;Flood Fill#xff09;是一…原理
泛洪填充算法和分水岭算法是图像处理中的两种重要算法主要用于区域分割但它们的原理和应用场景有所不同但是他们的基础思想都是基于区域迭代实现的区域之间的划分。
泛洪算法
泛洪填充算法Flood Fill是一种经典的图像处理算法用于确定和标记与给定点连接的区域通常在图像填充、分割、边界检测等方面应用广泛。为了更直观地理解泛洪填充算法我们可以通过一系列生动的图像和步骤来介绍其工作原理。
假设我们有一个二维图像每个像素可以有不同的颜色或灰度值。泛洪填充算法的目标是从某个起始像素开始填充所有与其相连且具有相同颜色的像素。常见的应用包括图像编辑中的填充工具如油漆桶工具和迷宫求解等。
算法流程
以下是泛洪填充算法的基本步骤配合图像说明 选择起始点和目标颜色 选择图像中的一个起始像素点如鼠标点击的位置记作 (x, y)。确定要填充的目标颜色。 初始化队列 将起始点 (x, y) 加入队列。 处理队列 当队列不为空时重复以下步骤 从队列中取出一个像素点 (cx, cy)。如果 (cx, cy) 的颜色等于目标颜色则进行填充。将 (cx, cy) 的四个邻居上、下、左、右加入队列如果这些邻居还没有被处理过且颜色等于目标颜色。 分水岭算法
分水岭算法是一种基于形态学和拓扑学的图像分割技术。它将图像视为一个拓扑地形通过标记图像的不同区域例如山脉和盆地进行分割。分水岭算法的基本思想是通过模拟雨水从山顶流向盆地的过程确定图像中不同区域的边界。
分水岭迭代过程
把梯度图像中的所有像素按照灰度值进行分类并设定一个测地距离阈值。找到灰度值最小的像素点默认标记为灰度值最低点让threshold从最小值开始增长这些点为起始点。水平面在增长的过程中会碰到周围的邻域像素测量这些像素到起始点灰度值最低点的测地距离如果小于设定阈值则将这些像素淹没否则在这些像素上设置大坝这样就对这些邻域像素进行了分类。随着水平面越来越高会设置更多更高的大坝直到灰度值的最大值所有区域都在分水岭线上相遇这些大坝就对整个图像像素的进行了分区。
实际应用时常结合其他预处理来实现前后景的分割 算法流程 梯度计算 首先计算图像的梯度梯度可以使用 Sobel 算子或其他方法计算。梯度图像反映了图像中像素值变化的幅度。 其中 是原始图像是梯度图像。 标记区域 对图像进行标记将前景对象和背景标记出来。可以使用形态学操作来获取这些标记。 确定前景使用距离变换和阈值化来确定前景区域。 确定背景通过膨胀操作扩展前景区域从而确定背景区域。 确定未知区域 未知区域是背景和前景的差集。 连接组件标记 对前景区域进行连通组件标记每个连通组件代表一个独立的前景对象。 分水岭变换 使用分水岭变换对梯度图像进行处理分割图像中的不同区域。 分水岭变换后标记图像的边界区域将被标记为 -1。
API介绍
floodfill
int cv::floodFill ( InputOutputArray image, //输入图像InputOutputArray mask, //输入输出的maksPoint seedPoint, //种子点Scalar newVal, //信的Rect * r ect , 0 // 存储填充区域的边界Scalar loDiff , Scalar() // 允许填充的像素值差的下届Scalar upDiff , Scalar() // 允许填充的像素值差的上届int flags 4 // 4联通或8联通
)
import cv2
import numpy as np
import matplotlib.pyplot as plt
def main():# 加载图像image_path D:\code\src\code\lena.jpg # 替换为你的图像路径image cv2.imread(image_path)if image is None:print(Error: Unable to load image.)return# 定义种子点和新颜色seed_point (30, 30) # 替换为你希望的种子点 (x, y)new_color (0, 0, 255) # 新颜色为绿色 (B, G, R)# 创建掩码比原图多出两行两列mask np.zeros((image.shape[0] 2, image.shape[1] 2), np.uint8)# 设置差值范围lo_diff (10, 10, 10)up_diff (10, 10, 10)image_src image.copy()# 执行泛洪填充flags 4 # 4-连通num, im, mask, rect cv2.floodFill(image, mask, seed_point, new_color, lo_diff, up_diff, flags)# 显示填充后的图像plt.subplot(131),plt.imshow(image_src[…,::-1]),plt.title(Source Image), plt.xticks([]), plt.yticks([])plt.subplot(132),plt.imshow(mask[…,::-1]),plt.title(Mask Image), plt.xticks([]), plt.yticks([])plt.subplot(133),plt.imshow(image[…,::-1]),plt.title(Filled Image), plt.xticks([]), plt.yticks([])plt.show()if name main:main()watermeshed
cv::watershed ( InputArray image, //输入图像
InputOutputArray markers //输入出的标记
)
//即根据传入的确信区域以及原图经过分水岭迭代后得到的确信区域
import cv2
import numpy as np
import matplotlib.pyplot as plt
import imageiodef plot_image(image, title, save_path):plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))plt.title(title)plt.axis(off)plt.savefig(save_path)plt.close()def save_gif(frames, filename, duration0.5):imageio.mimsave(filename, frames, durationduration)def watershed_segmentation(image_path):# Read the imageimage cv2.imread(image_path)gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# Apply thresholdingret, thresh cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV cv2.THRESH_OTSU)# Noise removal with morphological operationskernel np.ones((3, 3), np.uint8)opening cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations2)# Sure background areasure_bg cv2.dilate(opening, kernel, iterations3)# Finding sure foreground areadist_transform cv2.distanceTransform(opening, cv2.DIST_L2, 5)ret, sure_fg cv2.threshold(dist_transform, 0.7 * dist_transform.max(), 255, 0)# Finding unknown regionsure_fg np.uint8(sure_fg)unknown cv2.subtract(sure_bg, sure_fg)# Marker labellingret, markers cv2.connectedComponents(sure_fg)# Add one to all labels so that sure background is not 0, but 1markers markers 1# Now, mark the region of unknown with zeromarkers[unknown 255] 0# Apply watershedmarkers cv2.watershed(image, markers)image[markers -1] [255, 0, 0] # Mark boundaries with red color# Collect frames for GIFframes []for step in [Original, Threshold, Morph Open, Sure BG, Sure FG, Unknown, Markers, Watershed]:if step Original:frame image.copy()elif step Threshold:frame cv2.cvtColor(thresh, cv2.COLOR_GRAY2BGR)elif step Morph Open:frame cv2.cvtColor(opening, cv2.COLOR_GRAY2BGR)elif step Sure BG:frame cv2.cvtColor(sure_bg, cv2.COLOR_GRAY2BGR)elif step Sure FG:frame cv2.cvtColor(sure_fg, cv2.COLOR_GRAY2BGR)elif step Unknown:frame cv2.cvtColor(unknown, cv2.COLOR_GRAY2BGR)elif step Markers:frame np.zeros_like(image)for i in range(1, ret 1):frame[markers i] np.random.randint(0, 255, size3)elif step Watershed:frame image.copy()frame_path f{step.lower().replace( , _)}.pngplot_image(frame, step, frame_path)frames.append(imageio.imread(frame_path))return frames# Main execution
image_path D:\code\src\code\R-C.png # Replace with your image path
frames watershed_segmentation(image_path)
save_gif(frames, watershed.gif, duration1000)参考链接
OpenCV26图像分割 – 距离变换与分水岭算法硬币检测、扑克牌检测、车道检测_分水岭算法分割咖啡豆-CSDN博客
图像处理之漫水填充算法flood fill algorithm-腾讯云开发者社区-腾讯云 (tencent.com)
【OpenCVC】分水岭算法_opencv分水岭c-CSDN博客
- 上一篇: 国企公司网站制作北京做网站的公司
- 下一篇: 国税网站建设管理WordPress商品浏览权限
相关文章
-
国企公司网站制作北京做网站的公司
国企公司网站制作北京做网站的公司
- 技术栈
- 2026年04月20日
-
国企500强名单优化方案生物必修一答案
国企500强名单优化方案生物必修一答案
- 技术栈
- 2026年04月20日
-
国内做网站的企业自己想做电商怎么入手
国内做网站的企业自己想做电商怎么入手
- 技术栈
- 2026年04月20日
-
国税网站建设管理WordPress商品浏览权限
国税网站建设管理WordPress商品浏览权限
- 技术栈
- 2026年04月20日
-
国税网站建设现状江苏省城乡和住房建设厅网站首页
国税网站建设现状江苏省城乡和住房建设厅网站首页
- 技术栈
- 2026年04月20日
-
国通快速建站室内装修软件哪个好
国通快速建站室内装修软件哪个好
- 技术栈
- 2026年04月20日
