1. ROI

ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。
ROI ROI多用于图像合并,之后高斯模糊,可以无缝连接

1.1 PS怎么知道宽与高尺寸

每个图层框框都要标出宽与高的尺寸,我要怎么弄?
你在ps里按F8显示信息,在那个面板下拉三角的选项里将单位调成像素,然后你鼠标停的位置就可以看到座标了(上面那个图的标注标的实在很差) ,某个图形的长宽之类的数据,可以计算得出,也可以用选框工具选中了之后,在信息那个窗口看W宽和H高

1.2 代码

# -*- coding:utf-8 -*-
# Linda Li 2019/8/18 7:36 cv_19_roi PyCharm

import cv2 as cv
import numpy as np


print("------hello python------")
src = cv.imread("../cv_02/cv_193.jpeg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)

# 高度53:198,宽度360:475,将人脸抠出来
face = src[53:198, 360:475]
cv.imshow("face", face)

# 转换为灰度图像
gray_face = cv.cvtColor(face, cv.COLOR_BGR2GRAY)
cv.imshow("gray_face", gray_face)

# 将gray_face还原为RGB图像,之后才可以拼到原来的RGB图像上
backface = cv.cvtColor(gray_face, cv.COLOR_GRAY2BGR)
cv.imshow("backface", backface)
src[53:198, 360:475] = backface
cv.imshow("after_src", src)

cv.waitKey(0)

cv.destroyAllWindows()

python利用opencv实现变化检测_python

python利用opencv实现变化检测_python_02

2泛洪填充

最长见的是递归算法和基于扫描项的算法,基于扫描项的算法更快,更常用

python利用opencv实现变化检测_OpenCV_03

OpenCV要求mask的类型必须是uint8,必须高和宽+2是为了周边像素被处理,并且需要时单通道

2.1 cv.FLOODFILL_FIXED_RANGE

改变图像,泛洪填充

# -*- coding:utf-8 -*-
# Linda Li 2019/8/18 7:36 cv_19_roi PyCharm

import cv2 as cv
import numpy as np


def fill_color_demo(image):
    """彩色图像的填充"""
    # 从原图中拷贝一张图像出来
    copyImg = image.copy()

    # 提取出image的宽和高
    h, w = image.shape[:2]

    # OpenCV要求mask的类型必须是uint8,必须高和宽+2是为了周边像素被处理,并且需要时单通道
    mask = np.zeros([h + 2, w + 2], np.uint8)

    # 在(30,30)这个点取当前的像素BGR值,减去100,100是要填充的最低的像素的范围
    # 在30,30)这个点取当前的像素BGR值,加上50,50是要填充的最低的像素的范围
    # cv.FLOODFILL_FIXED_RANGE在上面的范围内的全部都填充上黄色(0, 255, 255)
    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)


print("------hello python------")
src = cv.imread("../cv_02/cv_193.jpeg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)

# 调用函数
fill_color_demo(src)

cv.waitKey(0)

cv.destroyAllWindows()

python利用opencv实现变化检测_OpenCV_04

2.2 cv.FLOODFILL_MASK_ONLY

不改变图像,只填充遮罩层本身,忽略新的颜色值参数

# -*- coding:utf-8 -*-
# Linda Li 2019/8/18 7:36 cv_19_roi PyCharm

import cv2 as cv
import numpy as np


def fill_binary():
    image = np.zeros([400, 400, 3], np.uint8)

    # 3个通道的高100:300,宽100:300的范围内都赋值为255,也就是中间的一块200*200的区域为白色
    image[100:300, 100:300, :] = 255
    cv.imshow("fill_binary", image)

    # 建立一个蒙版,OpenCV要求mask的类型必须是uint8,必须高和宽+2是为了周边像素被处理,并且需要时单通道
    mask = np.ones([402, 402, 1], np.uint8)
    # mask也是中间的200*200的一块区域,并且赋值为黑色注意=0
    # 遮罩层必须是0,如果已经是1了就不会填充图像了
    mask[101:301, 101:301] = 0

    # seedpoint = (200, 200)从这个图的最开始位置开始填充
    cv.floodFill(image, mask, (200,200), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)

    cv.imshow("filled_binary", image)


print("------hello python------")

# 调用函数
fill_binary()

cv.waitKey(0)

cv.destroyAllWindows()

python利用opencv实现变化检测_调用函数_05