繁体   English   中英

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

[英]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 返回值0255的二进制图像。

  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM