烟台网站建设方案托管,无锡网站制作企业,网站建设中遇到的问题,自己怎么样建网站目录
一 漫水填充算法--FloodFill
二 涉及的函数
三 实践 一 漫水填充算法--FloodFill
FloodFill漫水填充算法就是选中与种子点相连接的区域#xff0c;利用指定颜色进行区域颜色填充。可以通过设置连通方式或像素的范围控制填充的效果。通常是用来标记或者分离图像的一部…目录
一 漫水填充算法--FloodFill
二 涉及的函数
三 实践 一 漫水填充算法--FloodFill
FloodFill漫水填充算法就是选中与种子点相连接的区域利用指定颜色进行区域颜色填充。可以通过设置连通方式或像素的范围控制填充的效果。通常是用来标记或者分离图像的一部分以便做进一步分析和处理。
二 涉及的函数
cv2.floodFill()函数原型如下
cv2.floodFill(image, mask, seedPoint, newVal, loDiffNone, upDiffNone, flagsNone)
输入
①image【输入/输出】1或者3通道、 8bit或者浮点图像。仅当参数flags的FLOODFILL_MASK_ONLY标志位被设置时image不会被修改否则的话image会被修改。
②mask【输入/输出】 操作掩码必须为单通道、8bit且比原图image宽、高多2个像素。使用前必须先初始化。只有对于掩码层上对应为0的位置才能泛洪所以掩码层初始化为0矩阵。
③seedPoint漫水填充的种子点起始像素点。根据该点的像素判断决定和其相近颜色的像素点是否被泛洪处理。
④newVal被填充的像素点的新像素值B,G,R。
⑤loDiff(loDiff1,loDiff2,loDiff3)添加进种子点区域条件的下界差值。例如seed(B0,G0,R0)泛洪区域下界为B0-loDiff1,G0-loDiff2,R0-loDiff3。
⑥upDiff(upDiff1,upDiff2,upDiff3)添加进种子点区域条件的上界差值。例如seed(B0,G0,R0)泛洪区域上界为B0upDiff1,G0upDiff2,R0upDiff3。
⑦flag为泛洪算法的处理模式。 当为CV_FLOODFILL_FIXED_RANGE时待处理的像素点与种子点作比较在范围之内则填充此像素 。 改变图像填充newvalue。 当为CV_FLOODFILL_MASK_ONLY 时函数不填充原始图像iamge而是填充掩码图像。不改变原图像也就是newvalue参数失去作用而是改变对应区域的掩码。 返回
①image【输入/输出】
②mask【输入/输出】 操作掩码。
三 实践
实践①不同的seedPoint
代码
import numpy as np
import cv2
import matplotlib.pyplot as plt
def dealImg(img):b, g, r cv2.split(img)img_rgb cv2.merge([r, g, b])return img_rgb
def dealImageResult(img_path):im cv2.imread(img_path)h, w im.shape[:2]im1 im.copy()im2 im.copy()im3 im.copy()im4 im.copy()im5 im.copy()mask1 np.zeros([h2, w2], np.uint8)mask2 np.zeros([h2, w2], np.uint8)mask3 np.zeros([h2, w2], np.uint8)mask4 np.zeros([h2, w2], np.uint8)mask5 np.zeros([h2, w2], np.uint8)cv2.floodFill(im1, mask1, (20, 20), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)cv2.floodFill(im2, mask2, (90, 80), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)cv2.floodFill(im3, mask3, (100, 150), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)cv2.floodFill(im4, mask4, (180, 180), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)cv2.floodFill(im5, mask5, (200, 190), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)fig plt.figure(figsize(10, 10))im dealImg(im)im1 dealImg(im1)im2 dealImg(im2)im3 dealImg(im3)im4 dealImg(im4)im5 dealImg(im5)titles [img, seedPoint(20, 20), seedPoint(40, 40), seedPoint(60, 70), seedPoint(100, 150), seedPoint(200, 190)]images [im, im1, im2, im3, im4, im5]for i in range(6):plt.subplot(2, 3, i 1), plt.imshow(images[i], gray)plt.title({}.format(titles[i]), fontsize20, hacenter)plt.xticks([]), plt.yticks([])# plt.subplots_adjust(leftNone, bottomNone, rightNone, topNone, wspace0.3, hspace0)# plt.tight_layout()plt.show()fig.savefig(test_results.jpg, bbox_inchestight)
if __name__ __main__:dealImageResult(4.jpeg)pass
效果图 实践②指定位置的填充
代码
import numpy as np
import cv2
import matplotlib.pyplot as plt
def dealImg(img):b, g, r cv2.split(img)img_rgb cv2.merge([r, g, b])return img_rgb
def dealImageResult(img_path):im cv2.imread(img_path)h, w im.shape[:2]print(h, w)im1 im.copy()im2 im.copy()im3 im.copy()mask1 np.ones([h2, w2], np.uint8)mask1[0:100, 0:100] 0mask2 np.ones([h2, w2], np.uint8)mask2[0:200, 0:200] 0mask3 np.ones([h2, w2], np.uint8)mask3[0:w, 0:h] 0cv2.floodFill(im1, mask1, (20, 20), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)cv2.floodFill(im2, mask2, (20, 20), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)cv2.floodFill(im3, mask3, (20, 20), (255, 255, 0), (100, 100, 50), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)fig plt.figure(figsize(10, 10))im dealImg(im)im1 dealImg(im1)im2 dealImg(im2)im3 dealImg(im3)titles [img, mask1_result, mask2_result, mask3_result]images [im, im1, im2, im3]for i in range(4):plt.subplot(2, 2, i 1), plt.imshow(images[i], gray)plt.title({}.format(titles[i]), fontsize20, hacenter)plt.xticks([]), plt.yticks([])# plt.subplots_adjust(leftNone, bottomNone, rightNone, topNone, wspace0.3, hspace0)# plt.tight_layout()plt.show()fig.savefig(test_results.jpg, bbox_inchestight)
if __name__ __main__:dealImageResult(4.jpeg)pass
效果图 前文回顾 入门篇目录 数字图像处理入门篇一 图像的数字化与表示 数字图像处理入门篇二 颜色空间 数字图像处理入门篇三 灰度化 数字图像处理入门篇四 像素关系 数字图像处理入门篇五 图像数据预处理之颜色空间转换 数字图像处理入门篇六 图像数据预处理之坐标变化 数字图像处理入门篇七 图像数据预处理之灰度变化 数字图像处理入门篇八 图像数据预处理之直方图 数字图像处理入门篇九 图像数据预处理之滤波 数字图像处理入门篇十 边缘检测 数字图像处理入门篇十一 形态学处理 数字图像处理入门篇十二 自适应阈值分割 数字图像处理入门篇十三 仿射变换 数字图像处理入门篇十四 透视变换 实践篇目录 数字图像处理实践篇一 将图像中的指定目标用bBox框起来吧 数字图像处理实践篇二 画出图像中目标的轮廓 数字图像处理实践篇三 将两张图像按照指定比例融合 数字图像处理实践篇四 图像拼接基于SIFT特征点和RANSAC方法 数字图像处理实践篇五 使用Grabcut算法进行物体分割 数字图像处理实践篇六 利用hough变换进行直线检测 数字图像处理实践篇七 利用霍夫变换进行圆环检测 数字图像处理实践篇八 Harris角点检测 数字图像处理实践篇九 基于边缘的模板匹配 数字图像处理实践篇十 图像质量检测 数字图像处理实践篇十一 图像中的条形码解析 数字图像处理实践篇十二 基于小波变换的图像降噪 数字图像处理实践篇十三 数据增强之给图像添加噪声 数字图像处理实践篇十四 图像金字塔 数字图像处理实践篇十五 基于傅里叶变换的高通滤波和低通滤波 数字图像处理实践篇十六 基于分水岭算法的图像分割 数字图像处理实践篇十七 Shi-Tomasi 角点检测 数字图像处理实践篇十八 人脸检测