使用纽比。任何在opencv中匹配颜色会产生奇怪的结果

2024-10-08 18:25:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着打开一个彩色的摄像头来检测。因为它需要实时执行此操作,所以我选择使用numpy切片。问题是numpy总是检测到我输入的颜色,除非我完全遮住相机,我只是不明白为什么。在

下面是相关的代码片段:

import numpy as np
import cv2
import video

while True:
            ret,frame = cam.read()          
            img = frame.copy()
            sens = 20
            b = 0
            #roughly neon green
            img1B = 20
            img1G = 230
            img1R = 50  
            if np.any(np.logical_and(img[:,:,0]>=img1B-sens, img[:,:,0]<=img1B+sens)):
                b = True
            else:
                b = False
            if np.any(np.logical_and(img[:,:,1]>=img1G-sens, img[:,:,1]<=img1G+sens)):
                g = True
            else:
                g = False
            if np.any(np.logical_and(img[:,:,2]>=img1R-sens, img[:,:,2]<=img1R+sens)):
                r = True
            else:
                r = False                       
            print b,g,r  

B,G,R不应该总是真的,除非摄像头看到一个霓虹绿像素,所以我不确定发生了什么。在


Tags: andimportnumpyfalsetrueimgifnp
1条回答
网友
1楼 · 发布于 2024-10-08 18:25:30

您不需要使用numpy操作三次来过度复杂化问题。您可以简单地使用^{}^{}来完成您的工作。以上步骤可以调整为一种方法,您可以从while循环中调用该方法来处理每个网络摄像头帧。在

import cv2

def detect_color_blob(img_BGR, blob_color_BGR, tolerance, threshold):
    blob_color_lower = [blob_color_BGR[0] - tolerance, blob_color_BGR[1] - tolerance, blob_color_BGR[2] - tolerance]
    blob_color_upper = [blob_color_BGR[0] + tolerance, blob_color_BGR[1] + tolerance, blob_color_BGR[2] + tolerance]

    # Get a Binary Mask, where 255 => blob color found and 0=> blob color NOT found
    mask = cv2.inRange(img_BGR, blob_color_lower, blob_color_upper)

    # Check if the detected number of pixels is greater than threshold.
    return cv2.countNonZero(mask) > threshold

相关问题 更多 >

    热门问题