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.填充的方法

原文地址:https://www.cnblogs.com/ssyfj/p/9261056.html

时间: 2024-07-31 19:13:04

OpenCV---ROI(region of interest)和泛洪填充的相关文章

[zt] ROI (Region of Interest) 感兴趣区域 OpenCV

在以前介绍IplImage结构的时候,有一个重要的参数——ROI.ROI全称是”Region Of Interest”,即感兴趣的区域.实际上,它是IPL/IPP(这两个是Inter的库)结构IplROI的实例.IplROI包含xOffset.yOffset.height.width和coi成员变量.其中COI代表channel of interest(感兴趣的通道).ROI的思想是:一旦设定ROI,通常组用于整幅图像的函数便只会对ROI所表示的子图像进行操作.如果COI被设置非0值,则对该图像

Python+OpenCV图像处理(五)—— ROI与泛洪填充

一.ROI ROI(region of interest),感兴趣区域.机器视觉.图像处理中,从被处理的图像以方框.圆.椭圆.不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI. 代码如下: #进行图片截取.合并.填充 import cv2 as cv src=cv.imread('E:\imageload\lena.jpg') cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE) cv.imshow('first_image', src

opencv python:ROI 与 泛洪填充

提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ONLY 选项说明: cv2.FLOODFILL_FIXED_RANGE:改变图像,泛洪填充 cv2.FLOODFILL_MASK_ONLY:不改变图像,只填充遮罩层本身,忽略新的颜色值参数 import cv2 import numpy as np # 读取一张图片 src = cv2.imread(

OpenCV —— ROI

通过 cvResetImageRoI 函数释放ROI是非常重要的,否则其他操作将默认在ROI区域中进行 通过巧妙的使用widthStep,可以达到同ROI一样的效果 —— 如果想设置和保持一副图像的多个子区域处于活动状态(ROI 只能串行处理并且必须不断的设置和重置) #include <cv.h> #include <highgui.h> int main(int argc,char** argv) { IplImage* src; src=cvLoadImage("w

Region of Interest(ROI)

创建一个ROI Mat,包含 50 X 50像素,起点(25,25) Mat roi(image, Rect(25, 25, 50, 50)); 在表征Mat的范围的时候,顺序是 row 然后是 col (先高后宽).若使用此方法获取ROI,那么在ROI上的操作将直接作用到原图像上.创建的ROI并没有做一个深度copy,如果想要一个真正的copy,使用clone函数 Mat imageCopy = image.clone(); 如果想要把感兴趣区域高亮一下,用这样的骚操作 Mat roi(ima

OpenCV与EmguCV中的漫水填充

漫水填充算法,是根据选定的种子点,用一种自定义的颜色填充种子点的联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果. 漫水填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析. 所谓漫水填充,简单来说,就是自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色. 漫水填充也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或者只处理掩码指定的像素点. 在OpenCV中,漫水填充是填充算法中最通用的方法.且在OpenCV 2.X中,使用C++重写过的FloodF

opencv ROI(感兴趣区域替换)

#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; int main() { Mat img=imread("1.jpg"); Mat imgTemp=img.clone(); Mat logo = imread("2.jpg"); Mat roi = imgTemp(Rect(50, 50, logo.cols, logo.rows)); logo.co

OpenCv ROI操作

Mat img, dst; Rect imgroi(0, 0, img.cols, img.rows);//小图像img需要复制到大图的像素区域rect Rect dstroi(0, 0, img.cols, img.rows);//大图像dst中接收的区域rect Mat dstregion = dst(dstroi);//获取大图像dst接收区域的像素应用 img(imgroi).convertTo(dstregion, dstregion.type(), 1, 0);//将图像img的该区

opencv 图像基本操作 获取图像大小、ROI操作、通道分割与合并等

opencv中的图像基本操作方法 访问和修改图像某像素点的值 函数 a=img[y,x] #获取像素点的值 img[y,x]=b #修改像素点的值 实例 import cv2 as cv import numpy as np img = cv.imread('baby.png') px = img[50,100] print(px) # output:[76,94,94] # 只获取图像蓝色通道的值 img[50,100] = [0,0,255] print(px) # output:[0,0,