如何定义阈值以仅检测图像中的绿色对象: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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章