RIO与泛洪填充——(OpenCV+Python)
1.ROI
ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。
图片截取、合并、填充
import cv2 as cvsrc = cv.imread('C:\pics\samples\data\lena.jpg') cv.namedWindow('first_image',cv.WINDOW_AUTOSIZE) cv.imshow('first_image',src) face = src[200:300,200:400] #选择200:300行、200:400列区域作为截取图像 gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY) #生成的灰度图是单通道图像 backface = cv.cvtColor(gray,cv.COLOR_GRAY2RGB) #将单通道图像转换为三通道RGB灰度图,因为只有三通道的backface才可以赋给三通道的src src[200:300,200:400] = backface cv.imshow("face",src) cv.waitKey(0) cv.destoryAllWindows()
2.泛洪填充(彩色图像填充)
1.opencv里的mask都是为uin8类型的单通道阵列
2.泛洪填充算法也叫漫水填充算法。opencv的floodFill函数原型: floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]]) -> retval, image, mask, rect
image参数表示输入/输出1或3通道,8位或浮点图像。
mask参数表示掩码,该掩码是单通道8位图像,比image的高度多2个像素,宽度多2个像素。填充时不能穿过输入掩码中的非零像素。
seedPoint参数表示泛洪算法(漫水填充算法)的起始点。
newVal参数表示在重绘区域像素的新值。
loDiff参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之负差的最大值。
upDiff参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之正差的最大值。
flags参数:操作标志符,包含三部分:(参考https://www.cnblogs.com/little-monkey/p/7598529.html)
低八位(0~7位):用于控制算法的连通性,可取4(默认)或8。
中间八位(8~15位):用于指定掩码图像的值,但是如果中间八位为0则掩码用1来填充。
高八位(16~32位):可以为0或者如下两种标志符的组合:
FLOODFILL_FIXED_RANGE:表示此标志会考虑当前像素与种子像素之间的差,否则就考虑当前像素与相邻像素的差。FLOODFILL_MASK_ONLY:表示函数不会去填充改变原始图像,而是去填充掩码图像mask,mask指定的位置为零时才填充,不为零不填充。
3.泛洪填充(二值图像填充)
#泛洪填充(二值图像填充) import cv2 as cv import numpy as np def fill_binary():image = np.zeros([400, 400, 3], np.uint8)image[100:300, 100:300] = 255cv.imshow("fill_binary", image)mask = np.ones([402, 402], np.uint8) #mask要保证比原图像高和宽都多2mask[101:301, 101:301] = 0cv.floodFill(image, mask, (200,200), (255 , 0, 0), cv.FLOODFILL_MASK_ONLY) #mask不为0的区域不会被填充,mask为0的区域才会被填充cv.imshow("filled_binary", image) fill_binary() cv.waitKey(0) cv.destroyAllWindows()
1.不管是FLOODFILL_FIXED_RANGE还是FLOODFILL_MASK_ONLY操作,泛洪填充都不会填充掩膜mask的非零像素区域
2. mask[101:301, 101:301] = 0 这条语句为什么是101:301而不是100:300呢?我觉得应该是掩膜mask是比原图像左右上下都多了1,所以掩膜mask左右一共比原图像多2,上下也比原图像多2。那么原图像的100就自然对应到掩膜的101,同样原图像的300就自然对应到掩膜的301。
3.当FLOODFILL_MASK_ONLY设置了的时候,原图不会改变,只会用中间八位的值填冲mask。 floodFill的flags参数的中间八位的值就是用于指定填充掩码图像的值的,但是如果flags中间八位的值为0,则掩码会用1来填充。
很多问题参考https://www.cnblogs.com/FHC1994/p/9033580.html,感谢!!!
总结
以上是生活随笔为你收集整理的RIO与泛洪填充——(OpenCV+Python)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 珊瑚虫论坛版主自建网站声援珊瑚虫QQ
- 下一篇: jsp+ssm计算机毕业设计游戏装备交易