# read image in BGR
img = cv2.imread('image_path')
# convert to LAB space
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
# store the a-channel
a_channel = lab[:,:,1]
# Automate threshold using Otsu method
th = cv2.threshold(a_channel,127,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)[1]
# Mask the result with the original image
masked = cv2.bitwise_and(img, img, mask = th)
3条答案
按热度按时间xurqigkl1#
单向
我做了一个HSV颜色Map表。使用这个Map表比以前更容易和准确地找到颜色范围。
也许我应该在HSV* 中改变使用 *(40,40,40)~(70,255,255)来找到 * 绿色 *。
另一种方式
1.转换到HSV颜色空间,
1.使用
cv2.inRange(hsv, hsv_lower, hsv_higher)
获取绿色蒙版。我们使用 * 的范围(在HSV):(36,0,0)~(86,255,255)* 为这个 * 向日葵 *。
源图像:
掩蔽的绿色区域:
更多步骤:
核心源代码:
相似:
1.使用
cv::inRange
为颜色检测选择正确的HSV上下边界(OpenCV)iyfjxgzm2#
简介:
应用阈值来检测绿色颜色可以使用LAB color space非常容易地执行。
LAB颜色空间也有3个通道,但与RGB对应通道(其中所有3个都是颜色通道)不同,LAB中有2个颜色通道和1个亮度通道:
观察下图:
绿色和红色在A通道的极端上表示。在该通道的这些极端中的任一个上应用合适的阈值可以分割绿色或红色。
Demo:
以下图像按顺序排列:
**1.**原始图像-->>**2.**LAB转换图像A通道
**3.**阈值-->>**4.**原图蒙版
样本3:
编码:
代码只有几行:
异常:
如果绿色颜色明显,上述方法将完美工作。但是应用自动阈值可能并不总是有效,特别是当同一图像中存在各种绿色阴影时。
在这种情况下,在A通道上手动设置阈值。
fykwrbwg3#
您可以使用一个简单的HSV颜色阈值脚本来确定磁盘上任何图像的上/下限颜色范围。只需在
cv2.imread()
中更改图像路径。隔离绿色的示例:HSV颜色阈值下限/上限范围
确定
lower
和upper
HSV颜色范围后,您可以像这样分割所需的颜色: