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() # ウィンドウを破棄
実行結果
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()はウィンドウを閉じる。