Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用opencv Python检测图像中是否有灰色_Python_Opencv - Fatal编程技术网

用opencv Python检测图像中是否有灰色

用opencv Python检测图像中是否有灰色,python,opencv,Python,Opencv,我是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(

我是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,并找到颜色的色调值范围

拍摄视频的每一帧 从BGR转换到HSV颜色空间 为HSV图像设置蓝色范围的阈值 下面的代码是从现场检测蓝色物体

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.数组[0,0,0] 上_blue=np.数组[255,10255]

在HSV/HSL色彩空间中,灰色像素的特征是饱和度非常接近于零。然后,值通道将告诉您从黑到白的比例到底有多远,低亮度/值表示深灰色,而高亮度/值表示浅灰色

因此,对于灰色,您的代码如下所示

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)

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

拍摄视频的每一帧 从BGR转换到HSV颜色空间 为HSV图像设置蓝色范围的阈值 下面的代码是从现场检测蓝色物体

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.数组[0,0,0] 上_blue=np.数组[255,10255]

在HSV/HSL色彩空间中,灰色像素的特征是饱和度非常接近于零。然后,值通道将告诉您从黑到白的比例到底有多远,低亮度/值表示深灰色,而高亮度/值表示浅灰色

因此,对于灰色,您的代码如下所示

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)


您是否有特定的已知灰度值?您可以查找距离每个点几点以内的rgb值other@TenaciousB是的,我知道具体的灰度值,但如何在屏幕中搜索RGB值,这就是我不知道如何设置颜色阈值的cv2.inRange。对图像设置阈值。然后计算白色像素的数量或只是检查平均值。如果大于0,则它有一些白色,因此原始图像为灰色。看见然后在这个论坛或谷歌上搜索示例。检查我的答案@avielovadiya你有一个特定的已知灰度值吗?您可以查找距离每个点几点以内的rgb值other@TenaciousB是的,我知道具体的灰度值,但如何在屏幕中搜索RGB值,这就是我不知道如何设置颜色阈值的cv2.inRange。对图像设置阈值。然后计算白色像素的数量或只是检查平均值。如果大于0,则它有一些白色,因此原始图像为灰色。看见然后在这个论坛或谷歌上搜索示例。检查我的答案@avielovadiya检查链接+用cv2识别你的灰色范围。trackbarThanks查找答案,但你给我发送了摄像头中检测灰色的代码,我需要它到计算机上screen@avielovadiya,您是否需要已捕获的图像?您添加的最后一部分将适合灰色检测代码?你加的?因为我想在屏幕上实时检测灰色,而不仅仅是在一张图像上,你说的屏幕是什么意思检查链接+用cv2识别你的灰色范围。trackbarThanks获取答案,但是你给我发送了在相机中检测灰色的代码,我需要它到计算机上screen@avielovadiya,您是否需要已捕获的图像?您添加的最后一部分将适合灰色检测代码?你加的?因为我想在屏幕上实时检测灰色,而不仅仅是在一张图像上,你说的屏幕是什么意思