什么是ROI:
ROI区域即一张图上你感兴趣的区域,可以用数组切片的方式选出图像的特定区域对ROI区域的操作,也会反应在原图上。
import cv2 as cv
import numpy as np
src = cv.imread("C:/Users/idmin/Desktop/img/img1.jpg")
print(src.shape)
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
word = src[20:280, 20:280]
gray = cv.cvtColor(word, cv.COLOR_BGR2GRAY)
backword = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)
src[20:280, 20:280] = backword
cv.imshow("word", src)
cv.waitKey(0)
cv.destroyAllWindows() # 关闭所有窗口
效果图:挖出原图的一部分,转换为灰度图,再把灰度图转为BGR,放回到原图中去。
什么是范洪填充:
泛洪填充,即制定图中某一像素,以该像素为基准点,设置像素值的上限与下限。所有处在上下限范围内的像素,都会被填充为指定的新颜色
def fill_color(img):
copyimg = img.copy()
h, w = img.shape[:2]
mask = np.zeros([h+2, w+2], dtype=np.uint8)
# opencv要求mask数据类型必须是uint8
# 调用泛洪填充时,只有mask参数中像素值为0的区域才会被填充
# mask用来规定我们在什么范围内才被允许做填充
# 此处mask全部为0,所以整个图像都会被考虑
cv.floodFill(copyimg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
# 第三个参数为种子像素,也就是填充的起始点(30,30)
# 第四参数(0,255,255)表示填充的颜色(这里是黄色)
# 第五参数规定像素值范围下限,下限为 种子像素值-(100,100,100)
# 第六参数规定像素值范围上限,上限为 种子像素值+(50,50,50)
cv.imshow("fill_color_demo", copyimg)
效果图:
二值填充:
def fill_binary_demo():
# 二值填充,通过限定mask中像素值为0的区域来规定填充区域
img = np.zeros([400, 400, 3], dtype=np.uint8)
img[100:300, 100:300, :] = 255
copying = img.copy()
cv.imshow("copying", copying)
h, w = copying.shape[0:2]
mask = np.ones([h + 2, w + 2, 1], dtype=np.uint8)
# mask初始全部为1
mask[151:251, 151:251, :] = 0
# 设置允许填充区域(mask中像素值为0的区域才允许被填充)
# 此时填充既受到原图影响,又受到mask影响
cv.floodFill(copying, mask, (200, 200), (45, 25, 255), cv.FLOODFILL_MASK_ONLY)
# 第三个参数为种子像素,也就是填充的起始点(200,200)
# 第四参数(0,255,255)表示填充的颜色(这里是黄色)
cv.imshow("floodfill_bin", copying)
效果图: