使用 opencv 遮蔽颜色

Masking colors using opencv

我尝试使用 opencv 按颜色遮盖图像。

import cv2
import numpy as np
import matplotlib.pyplot as plt

导入库后,加载图像

img = cv2.imread('gmaps.jpg')
image = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(image);

把颜色转成hsv

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
plt.imshow(hsv);

屏蔽过程

low_orange = np.array([44, 6, 100])
high_orange = np.array([44, 24, 99])
masking = cv2.inRange(hsv,low_orange, high_orange)
plt.imshow(masking);

结果不是我所期望的。

图片:

结果:

编辑: 我只想屏蔽建筑物。相反,我得到了屏蔽所有帧的结果。

我不希望低 Value (100) 超过高 Value (99)。

此外,OpenCVHue 使用的范围是 0..180 而不是 0..360,因此您可能需要将 44 除以 2。

使用我在 中的回答,我设法为您提取了正确的值

代码:

    frame = cv2.imread("Xv6gx.png")
    blurred_frame = cv2.GaussianBlur(frame, (5, 5), 0)
    hsv = cv2.cvtColor(blurred_frame, cv2.COLOR_BGR2HSV)

    lower = np.array([4, 0, 7])
    upper = np.array([87, 240, 255])
    mask = cv2.inRange(hsv, lower, upper)
    contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

    for contour in contours:
        area = cv2.contourArea(contour)
        if area > 5000:
             # -- Draw Option 1 --
             cv2.drawContours(frame, contour, -1, (0, 255, 0), 3)

             # -- Draw Option 2--
             # rect = cv2.boundingRect(contour)
             # x, y, w, h = rect
             # cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv2.imshow("Mask", mask)
    cv2.imshow("Frame", frame)

    cv2.waitKey(0)

最终结果: