use*_*126 6 python opencv colors image-processing image-segmentation
我正在尝试使用一个程序来检测黑色的任何色调(和一些轻微的灰色),但目前我在尝试找到一个好的上色调向量(upper_hue 变量)时遇到了困难,该向量可以让我在不提取的情况下提取大部分黑色色调其他颜色。它似乎适用于黑色鞋子或雨伞等图片,但在处理亮度变化的道路照片时会出现问题。
我试图找到一个好的上限色调范围,使程序能够对此保持稳健,但是它有可能获得非黑色。
什么是黑色和灰色值的好的上色相向量。如果这不是问题,那么解决这个问题的好方法是什么?
代码:
import cv2
import numpy as np
import imutils
def color_seg(choice):
if choice == 'blue':
lower_hue = np.array([100,30,30])
upper_hue = np.array([150,148,255])
elif choice == 'white':
lower_hue = np.array([0,0,0])
upper_hue = np.array([0,0,255])
elif choice == 'black':
lower_hue = np.array([0,0,0])
upper_hue = np.array([50,50,100])
return lower_hue, upper_hue
# Take each frame
frame = cv2.imread('images/black0.jpg')
#frame = cv2.imread('images/road_1.jpg')
frame = imutils.resize(frame, height = 300)
chosen_color = 'black'
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of a color in HSV
lower_hue, upper_hue = color_seg(chosen_color)
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_hue, upper_hue)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
小智 5
在 hsv 颜色空间中,它非常简单。
img = cv2.imread(img_path)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_gray = np.array([0, 5, 50], np.uint8)
upper_gray = np.array([179, 50, 255], np.uint8)
mask_gray = cv2.inRange(hsv, lower_gray, upper_gray)
img_res = cv2.bitwise_and(img, img, mask = mask_gray)
Run Code Online (Sandbox Code Playgroud)
H 是色调,因此灰度检测器需要所有 H 值(0 -> 360°,由 OpenCV 表示的整数范围 0 到 179 以适合 8 位)。S 是饱和度 (0 -> 255)。灰度在 0 到 50 之间。如果我们不想保留白色值,我们可以取 5 作为最小值。V 是亮度值(0=暗 -> 255=亮)。
| 归档时间: |
|
| 查看次数: |
12977 次 |
| 最近记录: |