![](/img/trans.png)
[英]Get a quanity of pixels with specific color at image. Python, opencv
[英]Check whether all pixels in a cropped image have a specific color (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()
我想检查我的 480,640 相机中的中间 100 像素,看看它们是否都落在某个颜色范围内,以及它们是否会结束程序,但我找不到将中间 100 像素的值与以下值进行比较的方法我想要
1. 变量处理不当:您在转换为 HSV 颜色空间之前将图像裁剪为tag
2. cv2.inRange()
的错误使用: function 返回值0
或255
的二进制图像。
0
-> 如果像素不在范围内
255
-> 如果像素在范围内
经验法则:避免使用for
循环
由于cv2.inRange()
返回二值图像,因此只需找到裁剪图像中像素值的平均值。 如果平均值为255
(所有像素均为白色且在颜色范围内)-> 打破!
您可以使用以下代码段更改您的代码:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.