python - 从网络摄像头流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] 给了我正确隔离的通道,但是是灰度的。
解决方案
当你这样做时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()
推荐阅读
- bash - 如何在bash脚本中包含包含文件的目录的路径
- javascript - 即使存在,Chrome 也无法检测到我的 Service Worker 提取处理程序
- javascript - Javascript 3 个数组中的最小数
- javascript - 语法 let = { as:comp, ...props } = props; 意思是?
- agda - Agda:关于 `Vec` `last` 使用 `with` 的证明
- css - 一些(不是全部)后备 CSS 属性消失(create-react-app)
- python - 如何提取小数
- r - data.table 中的 Newey West 调整
- google-chrome - 如何为 Chrome 扩展禁用(灰显)页面操作?
- c++ - 什么可能导致 std::condition_variable notify_all 非常慢(> 2ms)?