博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV+python:ROI与泛洪填充
阅读量:3948 次
发布时间:2019-05-24

本文共 2158 字,大约阅读时间需要 7 分钟。

1,ROI

感兴趣区(Region of Interest,ROI) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法生成。机器视觉、图像处理中,感趣区可以是从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,通常用来作为图像分类的样本、掩膜、裁剪区或及其他操作。
源代码:

import cv2 as cvimport numpy as npsrc = cv.imread("F:/images/lena.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)cv.imshow("input image", src)ROI = src[50:250, 100:300]     #假设我们对她的帽子感兴趣,指定宽高的区域gray = cv.cvtColor(ROI, cv.COLOR_BGR2GRAY) #转换成灰度图backROI = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)  #还原为RGB图src[50:250, 100:300] = backROI  #重新置在原图中(ROI操作)cv.imshow("hat", src)cv.waitKey(0)cv.destroyAllWindows()

运行结果:

在这里插入图片描述在这里插入图片描述

2,泛洪填充算法(Flood Fill Algorithm)

泛洪填充算法又称洪水填充算法,是在很多图形绘制软件中常用的填充算法,最熟悉不过就是windows paint的油漆桶功能。算法的原理很简单,就是从一个点开始附近像素点,填充成新的颜色,直到封闭区域内的所有像素点都被填充新颜色为止。泛红填充实现最常见有四邻域像素填充法,八邻域像素填充法,基于扫描线的像素填充方法。根据实现又可以分为递归与非递归(基于栈)。所谓的floodFill 漫水填充就是在一张图片中,和种子点像素相差在[-loDiff,+upDiff]的时候就用newVal来填充这个点。

def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None):1.操作的图像, 2.掩码, 3.起始像素值,  #我们指定的第一个点的三个通道值4.填充的颜色, 5.填充颜色的低值, 参数3的三通道值 减去 参数5  #低值三通道6.填充颜色的高值 , 参数3的三通道值 加上 参数6  #高值三通道7.填充的方法       #彩色图像一般是FLOODFILL_FIXED_RANGE 指定颜色填充;还有一种是FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为零不填充

源代码:

import cv2 as cvimport numpy as npdef fill_color_demo(image):    copyImg = image.copy() #拷贝原图像    h, w = image.shape[:2]  #返回高和宽    mask = np.zeros([h+2, w+2], np.uint8)  #+2是为了使边缘像素也被修改    cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)    cv.imshow("fill_color_demo", copyImg)def fill_binary():    image = np.zeros([400, 400, 3], np.uint8)    image[100:300, 100:300, : ] = 255    cv.imshow("fill_binary", image)    mask = np.ones([402, 402, 1], np.uint8) #为1不填充,为0才进行填充,默认mask是单通道的,通道数1可写可不写    mask[101:301, 101:301] = 0 #加一的原因是mask[h+2,w+2],imge原来的ROI区域对应的是mask[+1,+1]的区域    cv.floodFill(image, mask, (200, 200), (100, 2, 255), cv.FLOODFILL_MASK_ONLY) # 最好写到我们填充的图像中间    cv.imshow("filled binary", image)src = cv.imread("F:/images/lena.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)cv.imshow("input image", src)fill_color_demo(src)fill_binary()cv.waitKey(0)cv.destroyAllWindows()

运行结果:

彩色填充
在这里插入图片描述在这里插入图片描述
二值填充
在这里插入图片描述
在这里插入图片描述

转载地址:http://oxhwi.baihongyu.com/

你可能感兴趣的文章
用弹性工作制留住员工
查看>>
知识=经验×反思2
查看>>
领导者如何发现关键问题
查看>>
学习无为领导力
查看>>
卓越领导看过程
查看>>
领导力与各种循环挑战
查看>>
达成谈判协议 - 避免操之过急
查看>>
销售人说话“十大忌”
查看>>
营销中的“战略非对称”
查看>>
android 如何开关Mediatek开发的Feature
查看>>
Android电话功能各部分深入探讨
查看>>
Android应用技巧总结
查看>>
Android创建sdcard详细图解
查看>>
Android开发:如何实现TCP和UDP传输
查看>>
Android电源管理相关应用技巧分享
查看>>
Android录音失真具体解决方案
查看>>
Android根文件系统相关应用介绍
查看>>
Android文件系统深入剖析
查看>>
Android判断网络状态方法详解
查看>>
在Android上实现Junit单元测试的四部曲
查看>>