注意:

  1. 转HSV颜色空间后,可以进行颜色阈值调整
  2. 构建掩膜后的图像是黑白的
  3. 对原图像和掩模进行位运算后,图像就只有你想要的颜色阈值,其他颜色都变为黑色
import cv2
import numpy as np

cap = cv2.VideoCapture(0)
while cap.isOpened():
    # 获取每一帧
    ret, frame = cap.read()
    # 转换到 HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # 设定蓝色的阈值
    lower_blue = np.array([110, 50, 50])
    upper_blue = np.array([130, 255, 255])
    # 根据阈值构建掩模
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    # 对原图像和掩模进行位运算
    res = cv2.bitwise_and(frame, frame, mask=mask)
    # 显示图像
    cv2.imshow('frame', frame)
    cv2.imshow('mask', mask)
    cv2.imshow('res', res)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break
# 关闭窗口
cv2.destroyAllWindows()

需求:提取任意四边形区域
做法:根据4点坐标,截取先ROI区域,掩膜方法
在这里插入图片描述

import cv2
import numpy as np

# 读取图像
image = cv2.imread('t1.png')

# 定义四边形的四个顶点坐标 [x, y]
points = np.array([
    [197, 137],   # 左上点
    [286, 163],   # 右上点
    [232, 278],   # 右下点
    [123, 241]     # 左下点
], dtype=np.int32)

# 在原图上绘制四边形
cv2.polylines(image, [points], True, (0, 255, 0), 2)  # 绿色线条,线宽2

# 计算四边形的边界框
x, y, w, h = cv2.boundingRect(points)

# 截取感兴趣区域(ROI)
roi = image[y:y+h, x:x+w].copy()

# 调整顶点坐标为ROI内的相对坐标
roi_points = points - np.array([[x, y]])

# 创建与ROI大小相同的掩码
mask = np.zeros_like(roi)

# 在掩码上绘制白色四边形
cv2.fillPoly(mask, [roi_points], (255, 255, 255))

# 按位与操作,提取四边形内的图像
result = cv2.bitwise_and(roi, mask)

# 显示结果
cv2.imshow('Original', image)
# cv2.waitKey(0)
cv2.imshow('ROI', roi)
# cv2.waitKey(0)
cv2.imshow('Mask', mask)
# cv2.waitKey(0)AA
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐