检查裁剪图像中的所有像素是否都具有特定的颜色(OpenCV/Python)


import cv2
import numpy as np

cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()

tag = frame[235:245, 315:325]
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red = np.array([20, 20, 50])
upper_red = np.array([255, 255, 130])

for i in range (235,245):
for j in range (315,325):
if cv2.inRange(tag[i][j],lower_red,upper_red):
break

cv2.imshow('image',frame)

if cv2.waitKey(1) == ord('q'):
break

cap.release()
cv2.destroyAllWindows()

我想在我的480640相机中检查我的中间100个像素,看看它们是否都在某个颜色范围内,以及它们是否在某个范围内结束程序,但我找不到将中间100个象素的值与我想要的值进行比较的方法

您的方法存在的问题:

1.变量处理不当:在转换为HSV颜色空间之前,您正在将图像裁剪为tag

2.cv2.inRange()用法错误:函数返回值为0255的二进制图像。

  • 0->如果像素没有落入范围

  • 255->如果像素落在范围内

Thumb规则:避免使用for循环


解决方案:

由于cv2.inRange()返回二进制图像,因此只需找到裁剪图像中像素值的平均值即可。如果平均值是CCD_ 9(所有像素都是白色并且在颜色范围内(->打破


您可以使用以下代码段更改代码:

ret, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red = np.array([20, 20, 50])
upper_red = np.array([255, 255, 130])
tag = hsv[235:245, 315:325]
mask = cv2.inRange(tag, lower_red, upper_red)
if np.mean(mask) == 255:
print("All the pixels are within the color range")
break

最新更新