首页 > 解决方案 > 从网络摄像头流openCV中隔离并显示红色通道

问题描述

使用下面的代码隔离红色通道并使其在显示的流中显示为红色。

import numpy as np 
import cv2

cap = cv2.VideoCapture(0)   
while(True):
    ret, frame = cap.read()
    red = frame[:, :, 2]
    new = np.zeros(frame.shape)
    new[:, :, 2] = red
    #flip = cv2.flip(dummy, 1)
    cv2.imshow( 'frame', new )

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

cap.release() 
cv2.destroyAllWindows()

我看到的是一个统一的亮红色流,但是 frame[:, :, 2] 给了我正确隔离的通道,但是是灰度的。

标签: pythonopencvvideo-streamingwebcam

解决方案


当你这样做时red = frame[:, :, 2],这会提取红色通道,它只是一个二维数组,其值范围从 0 到 255。如果你打印这个形状,你会看到它只有一维。如果显示此图像,输出看起来像灰度图像,但这些实际上是红色通道值。要仅可视化红色通道,您需要将蓝色和绿色通道设置为零。

import numpy as np 
import cv2

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

    # Set blue and green channels to 0
    frame[:, :, 0] = 0
    frame[:, :, 1] = 0
    cv2.imshow('frame', frame)

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

cap.release() 
cv2.destroyAllWindows()

推荐阅读