MENU

python カメラ画像から赤色成分だけ表示

 

import cv2
import numpy as np

# Webカメラから入力を開始
cap = cv2.VideoCapture(0)
while True:
 # 画像を取得
  _, frame = cap.read()
 # 画像を縮小
 frame = cv2.resize(frame, (500,300))
 # 青と緑の成分を0に (NumPyのインデックスを利用)---(*1)
 frame[:, :, 0] = 0 # 青要素を0
 frame[:, :, 1] = 0 # 緑要素を0
 # ウィンドウに画像を出力 --- (*2)
 cv2.imshow('RED Camera', frame)
 # Enterキーが押されたらループを抜ける
 if cv2.waitKey(1) == 13: break

cap.release() # カメラを解放
cv2.destroyAllWindows() # ウィンドウを破棄

実行結果

f:id:hanamichi_sukusuku:20210105172527p:plain

RGBのR(赤色)の値のみ画像に表示している。

 

 

webカメラの入力開始

cap = cv2.VideoCapture(0)

 

whileでフレームごとの画像出力

while True:
# 画像を取得
_, frame = cap.read()
# 画像を縮小
frame = cv2.resize(frame, (500,300))
# 青と緑の成分を0に (NumPyのインデックスを利用)---(*1)
frame[:, :, 0] = 0 # 青要素を0
frame[:, :, 1] = 0 # 緑要素を0
# ウィンドウに画像を出力 --- (*2)
cv2.imshow('RED Camera', frame)
# Enterキーが押されたらループを抜ける
if cv2.waitKey(1) == 13: break

VideoCapture()で生成されたオブジェクトにread()メソッドでワンフレームごとの画像を取得。

大きい画像は必要ないのでresize()で縮小。

 

numpyを使っての画像処理はRGB画像は高さ、幅、色の三次元配列。白黒画像は高さ、幅の二次元配列。

frame[:,:,0] = 0

ここでは青色の要素を0にしており、:このコロンの意味は全てという意味である。画像データは高さ、幅、色なので[:(高さ), :(幅), 0(色)]ということになる。つまり全ピクセルの色データの0番目の要素を0にする処理をしている。色は通常R,G,B(0,1,2)の順になっているがopencvでの画像はBGRになっているので今回の場合Bの部分の要素を0にすることができる。

frame[:,:,1] = 0

上記と同じで色の1番目の要素を0に指定している。

上記二つの処理によってR、つまり赤色の要素以外を消すことができた。

 

そしてcv2.imshow()でウィンドウを表示してcv2.waitKey()でenterを押された時処理を止める。

 

release()はカメラを閉じる。

cv2.destoryAllWindow()はウィンドウを閉じる。