gpt4 book ai didi

python - 通过opencv Python检测图像中是否存在灰色

转载 作者:行者123 更新时间:2023-12-02 16:13:45 24 4
gpt4 key购买 nike

我是 cv2 库的新手,我想制作一个程序来实时检测图像中是否存在灰色。到现在为止,我使用了一个可以实时显示屏幕的代码

import numpy as np
import cv2
import pyautogui
from mss import mss
from PIL import Image

mon = {'top': 268, 'left': 968, 'width': 931, 'height': 599}

sct = mss()

while 1:
sct.get_pixels(mon)
img = Image.frombytes('RGB', (sct.width, sct.height), sct.image)
cv2.imshow('test', np.array(img))
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break

但我不知道如何检测屏幕是否出现灰色(另一个问题是关于是否所有图片都是灰色而不是屏幕是否出现灰色)

最佳答案

更好的方法是将颜色空间转换为HSV,并找到颜色的Hue值范围。

  • 拍摄视频的每一帧
  • 将 BGR 颜色空间转换为 HSV 颜色空间
  • 为一系列蓝色设置 HSV 图像的阈值

以下代码来自OpenCV official检测蓝色物体的位置

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
# Take each frame
_, frame = cap.read()
# Convert BGR to HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# define range of blue color in HSV
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# Threshold the HSV image to get only blue colors
mask = cv.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame)
cv.imshow('mask',mask)
cv.imshow('res',res)
k = cv.waitKey(5) & 0xFF
if k == 27:
break
cv.destroyAllWindows()

用于直播画面灰度检测

范围将在 HSV 中

lower_blue = np.array([0,0,0])upper_blue = np.array([255,10,255])

在 HSV/HSL 色彩空间中,灰色像素的特征是饱和度非常接近于零。然后 Value channel 会告诉您它们实际从黑色到白色的比例有多远,低 Lightness/Value 是深灰色,而高 Lightness/Value 意味着浅灰色。

所以对于灰色,你的代码如下

import numpy as np
from PIL import Image
from mss import mss
import cv2 as cv
import cv2
mon = {'top': 268, 'left': 968, 'width': 931, 'height': 599}
sct = mss()
while (1):
# Take each
sct.get_pixels(mon)
img = Image.frombytes('RGB', (sct.width, sct.height), sct.image)
img = np.array(img)
# Convert RGB to HSV
hsv = cv.cvtColor(img, cv.COLOR_RGB2HSV)
# define range of gray color in HSV
lower_gray = np.array([0, 0, 0])
upper_gray = np.array([255, 10, 255])
# Threshold the HSV image to get only gray colors
mask = cv.inRange(hsv, lower_gray, upper_gray)
# Bitwise-AND mask and original image
res = cv.bitwise_and(img, img, mask=mask)
cv.imshow('original', img)
cv.imshow('mask', mask)
cv.imshow('res', res)
k = cv.waitKey(5) & 0xFF
if k == 27:
break
cv.destroyAllWindows()

下面的代码可以用于静态图片

import cv2
import numpy as np
image_path ="trail.jpg"
img = cv2.imread(image_path)
# Convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of gray color in HSV
lower_gray = np.array([0,0,0])
upper_gray = np.array([255,10,255])
# Threshold the HSV image to get only gray colors
mask = cv2.inRange(hsv, lower_gray, upper_gray)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(img,img, mask= mask)
cv2.imwrite("output.png",res)

关于python - 通过opencv Python检测图像中是否存在灰色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64038736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com