如何定义阈值以仅检测图像中的绿色对象:Opencv [重复]

Posted

技术标签:

【中文标题】如何定义阈值以仅检测图像中的绿色对象:Opencv [重复]【英文标题】:How to define a threshold value to detect only green colour objects in an image :Opencv [duplicate] 【发布时间】:2018-05-09 02:22:38 【问题描述】:

我只想从自然环境中捕获的图像中检测绿色物体。如何定义它?因为在这里我想传递阈值让我们说'x',通过使用这个x,我只想让绿色物体变成一种颜色(白色),其他的必须出现在另一种颜色(黑色) 请指导我这样做。提前致谢。

【问题讨论】:

另一个问题是 android 特有的,不是吗?这个问题被标记为python。 【参考方案1】:

更新

我制作了一个HSV 颜色图。是more easy and accurate 用这张图比以前找到颜色范围了。

也许我应该改用(40, 40,40) ~ (70, 255,255) in hsv 来找到green


原答案

    转换为HSV色彩空间, 使用cv2.inRange(hsv, hsv_lower, hsv_higher) 获取绿色面具。

我们使用the range (in hsv): (36,0,0) ~ (86,255,255) 来表示sunflower


源图片:

蒙面的绿色区域:

更多步骤:


核心源码:

import cv2
import numpy as np

## Read
img = cv2.imread("sunflower.jpg")

## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

## mask of green (36,25,25) ~ (86, 255,255)
# mask = cv2.inRange(hsv, (36, 25, 25), (86, 255,255))
mask = cv2.inRange(hsv, (36, 25, 25), (70, 255,255))

## slice the green
imask = mask>0
green = np.zeros_like(img, np.uint8)
green[imask] = img[imask]

## save 
cv2.imwrite("green.png", green)

类似的:

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

【讨论】:

不错!你愿意分享你的代码吗? 由于我使用 python opencv 我使用 bgr 的 hsv 值,因为下部绿色区域为 50,100,100,上部绿色区域为 70,255,255,绿色的 hsv 值为 60,255,255。但它没有用,通过使用它,我只能得到纯黑色的图像。 就我而言,我使用[36 0 0] ~ [ 86 255 255] @Silencer 谢谢它对我有用 为什么不呢?如果你查地图,你会发现blue(HSV)主要位于(110,150,50) ~ (120,255,255)

以上是关于如何定义阈值以仅检测图像中的绿色对象:Opencv [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python+OpenCv实现图像边缘检测(滑动调节阈值)

Python 如何使用 HoughLines 和 OpenCV 检测图像中的垂直线和水平线?

使用 OpenCV 检测图像中的十字

如何检测图像中的裂缝?

使用 OpenCV 的 Python 图像中的颜色百分比

OpenCV中的图像阈值处理算法