概述
OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 8 课)
ROI
ROI (Region of Interest) 即感兴趣区域, 就是在图像中分析的重点.
例子:
import cv2
# 读取图片
img = cv2.imread("girl3.jpg")
# ROI
face = img[100:750, 1000:1600]
# 获取灰度图
face_gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
face_gray = cv2.cvtColor(face_gray, cv2.COLOR_GRAY2BGR)
# 用灰度图替换脸
img[100:750, 1000:1600] = face_gray
# 图片展示
cv2.imshow("ROI", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存图片
cv2.imwrite("ROI.jpg", img)
输出结果:
泛洪填充
泛洪填充算法 (Flood Fill Algorithm), 是从一个点开始附近的像素点填充成新的颜色, 直到封闭区内所有的像素点都被填充新颜色为止.
格式:
cv2.floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)
参数:
- image: 输入图片
- mask: 掩码, 比 image 长宽高 2
- seedPoint: 泛洪算法的起始点
- newVal: 重绘区域的新值 (颜色)
- loDiff: seePoint - loDiff 下限
- upDiff: seePoint - upDiff 上限
- flags: 操作标志符
- LOODFILL_FIXED_RANGE: 改变图像, 泛洪填充
- FLOODFILL_MASK_ONLY: 不改变图像, 只填充 mask 本身, 忽略新的颜色值参数
例 1:
import numpy as np
import cv2
def flood_fill(image):
"""泛洪"""
# 深拷贝
image_copy = image.copy()
# 获取高宽
h, w = image.shape[:2]
# 获取mask
mask = np.zeros([h + 2, w + 2], np.uint8)
# 泛洪
cv2.floodFill(image_copy, mask, (1000, 200), (0, 255, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)
# 图片展示
cv2.imshow("flood_fill", image_copy)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 返回
return image_copy
if __name__ == "__main__":
# 读取图片
img = cv2.imread("girl3.jpg")
# 获取泛洪图像
flood_fill = flood_fill(img)
# 保存图片
cv2.imwrite("flood_fill.jpg", flood_fill)
输出结果:
例 2:
import numpy as np
import cv2
def flood_fill():
"""泛洪"""
# 获取图片
image = np.zeros([400, 400, 3], np.uint8)
# 获取mask
mask = np.ones([400 + 2, 400 + 2, 1], np.uint8)
mask[101:301, 101:301] = 0
# 泛洪
cv2.floodFill(image, mask, (200, 200), (100, 2, 255), cv2.FLOODFILL_MASK_ONLY)
# 图片展示
cv2.imshow("flood_fill", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 返回
return image
if __name__ == "__main__":
# 读取图片
img = cv2.imread("girl3.jpg")
# 获取泛洪图像
flood_fill = flood_fill()
# 保存图片
cv2.imwrite("flood_fill.jpg", flood_fill)
输出结果: