代码之家  ›  专栏  ›  技术社区  ›  Knowledge Seeker

检测像素是否为红色

  •  0
  • Knowledge Seeker  · 技术社区  · 6 年前

    我们可以在HSV中定义红色的范围,如下所示。我想检测某个像素是否为红色?我怎么能用蟒蛇做呢?我花了一整天,但找不到解决办法。请解决我的问题。我对巨蟒很陌生。我使用的代码是:

    img=cv2.imread("img.png")
    img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    
    # lower mask (0-10)
    lower_red = np.array([0,50,50])
    upper_red = np.array([10,255,255])
    mask0 = cv2.inRange(img_hsv, lower_red, upper_red)
    
    # upper mask (170-180)
    lower_red = np.array([170,50,50])
    upper_red = np.array([180,255,255])
    mask1 = cv2.inRange(img_hsv, lower_red, upper_red)
    image_height,image_width,_=img.shape    
    for i in range(image_height):
       for j in range(image_width):
           if img_hsv[i][j][1]>=lower_red and img_hsv[i][j][1]<=upper_red:
              print("Found red")
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Kinght 金    6 年前

    enter image description here

    1. hsv

    2. lower 0~5, upper 175~180

    enter image description here

    enter image description here


    #!/usr/bin/python3
    # 2018.07.08 10:39:15 CST
    # 2018.07.08 11:09:44 CST
    import cv2
    import numpy as np
    ## Read and merge
    img = cv2.imread("ColorChecker.png")
    img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    
    ## Gen lower mask (0-5) and upper mask (175-180) of RED
    mask1 = cv2.inRange(img_hsv, (0,50,20), (5,255,255))
    mask2 = cv2.inRange(img_hsv, (175,50,20), (180,255,255))
    
    ## Merge the mask and crop the red regions
    mask = cv2.bitwise_or(mask1, mask2 )
    croped = cv2.bitwise_and(img, img, mask=mask)
    
    ## Display
    cv2.imshow("mask", mask)
    cv2.imshow("croped", croped)
    cv2.waitKey()
    

    1. Choosing the correct upper and lower HSV boundaries for color detection with`cv::inRange` (OpenCV)

    2. How to detect two different colors using `cv2.inRange` in Python-OpenCV?