【问题标题】:Isolate and display red channel from webcam stream openCV从网络摄像头流openCV中隔离并显示红色通道
【发布时间】:2019-11-28 00:34:18
【问题描述】:

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

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] 为我提供了正确隔离的通道,但为灰度。

【问题讨论】:

  • 不知道这是否是问题所在,但您可能需要确保new 具有与dtype 相同的framenew = np.zeros_like(frame)
  • 像魅力一样工作 np.zeros_like 正是我想要的

标签: python opencv video-streaming webcam


【解决方案1】:

当您执行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()

【讨论】:

最近更新 更多