【问题标题】:Detect whether a pixel is red or not检测像素是否为红色
【发布时间】:2018-07-07 17:52:41
【问题描述】:

我们可以如下定义 HSV 中红色的范围。我想检测某个像素是否为红色?我怎样才能在 Python 中做到这一点?我花了一整天,但无法找到解决方案。请解决我的问题。我对 Python 很陌生。我正在使用的代码是:

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")

【问题讨论】:

  • 你能发布你得到的错误吗?
  • @JoseVasquez img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.error: OpenCV(3.4.1) C:\projects\opencv-python\opencv\modules\imgproc\src\color .cpp:11214: 错误: (-215) (scn == 3 || scn == 4) && (depth == 0 || depth == 5) in function cv::cvtColor
  • @JoseVasquez 这是我遇到的错误。
  • @KnowledgeSeeker 使用img=cv2.imread("img.png", 1) in the first line
  • 修复错误后,这行会出现问题:如果 img_hsv[i][j][1]>=lower_red 和 img_hsv[i][j][1]

标签: python numpy opencv image-processing hsv


【解决方案1】:

你几乎是对的。您可以将较低 RED 和较高 RED 的蒙版合并为一个蒙版。


为此ColorChecker.png

我找到 RED 的步骤:

  1. 读取图片并转换为hsv

  2. 我使用此颜色图选择红色范围 (lower 0~5, upper 175~180):

  1. 然后合并蒙版,可以通过蒙版判断像素是否为红色。或“裁剪”区域以进行可视化:


#!/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?

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 2011-09-22
    • 2020-08-31
    • 2019-06-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多