用opencv Python检测图像中是否有灰色
我是cv2库的新手,我想制作一个程序,实时检测图像中是否有灰色。 到目前为止,我一直在使用一个代码来实时显示屏幕用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(
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,您是否需要已捕获的图像?您添加的最后一部分将适合灰色检测代码?你加的?因为我想在屏幕上实时检测灰色,而不仅仅是在一张图像上,你说的屏幕是什么意思