OpenCV---ROI(region of interest)和泛洪填充
一:ROI
感兴趣区(Region of Interest,ROIs) 是图像的一部分,
它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法生成。
感趣区可以是点、线、面不规则的形状,通常用来作为图像分类的样本、掩膜、裁剪区或及其他操作。
(一)获取感兴趣区域
src = cv.imread("./1.png") #读取图片 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应 cv.imshow("input image",src) #通过名字将图像和窗口联系 print(src.shape) flower = src[200:400,100:250] cv.imshow("flower",flower)
原图:
感兴趣区域:
还原操作:
src = cv.imread("./1.png") #读取图片 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应 cv.imshow("input image",src) #通过名字将图像和窗口联系 print(src.shape) flower = src[200:400,100:250] cv.imshow("flower",flower) gray = cv.cvtColor(flower,cv.COLOR_BGR2GRAY) #获取一张灰度图像,单一通道 backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR) #单一通道转3通道 src[200:400,100:250] = backface cv.imshow("new image",src) cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作 cv.destroyAllWindows() #销毁所有窗口
二:泛洪填充floodFill
推文:图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能
(一)
所谓的floodFill 漫水填充就是在一张图片中,和种子点像素相差在[-loDiff,+upDiff]的时候就用newVal来填充这个点。
def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None): # real signature unknown; restored from __doc__
1.操作的图像, 2.掩码, 3.起始像素值, #我们指定的第一个点的三个通道值 4.填充的颜色, 5.填充颜色的低值, #低值三通道 6.填充颜色的高值 , #高值三通道 7.填充的方法
参数5.填充颜色的低值就是:参数3的三通道值 减去 参数5
参数6.填充颜色的高值就是:参数3的三通道值 加上 参数6
7.填充的方法 彩色图像一般是FLOODFILL_FIXED_RANGE 指定颜色填充 还有一种是FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为零不填充
def fill_color_demo(image): copyImg = image.copy() #从源图像上克隆出一张新图像 h,w = image.shape[:2] mask = np.zeros([h+2,w+2],np.uint8) #+2是为了使边缘像素也被修改 print(image[30,30]) #[187 192 191] 用它进行操作的 cv.floodFill(copyImg,mask,(30,30),(0,255,255),(50,50,50),(50,50,50),cv.FLOODFILL_FIXED_RANGE) cv.imshow("fill_color_demo",copyImg)
src = cv.imread("./1.png") #读取图片 fill_color_demo(src)
(二)FLOODFILL_MASK_ONLY我们可以自定义填充图像,掩码为1不填充,为0进行填充
def fill_binary(): image = np.zeros([400,400,3],np.uint8) image[100:300,100:300,:]=255 cv.imshow("fill_banary",image) mask = np.ones([402,402,1],np.uint8) mask[101:301,101:301] = 0 #这里设置需要加1--->101:301 这是我们填充的图像掩码为0 cv.floodFill(image,mask,(200,200),(0,255,0),cv.FLOODFILL_MASK_ONLY) #最好写到我们填充的图像中间 cv.imshow("fill_banary2",image)
fill_binary()
1.操作的图像, 2.掩码, 为1不填充,为0才进行填充
3.填充图像的中央部分 4.填充的颜色, 5.填充的方法
作者:山上有风景
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?