【C++】OpenCVでデフォルト以外のカメラから映像をキャプチャする方法
この記事では、OpenCVを使ってデフォルト以外のカメラから映像(ビデオ)をキャプチャする方法を解説します。実は、デフォルト以外のカメラへのアクセス方法は、デフォルトカメラの場合とほぼ同じです。唯一の違いは、VideoCapture cap(0) の代わりに、使用したいカメラ番号を指定する点だけです。
カメラ番号は、USBポートの接続順序に基づいて割り当てられます。たとえば、カメラが3番目のUSBポートに接続されている場合、そのカメラ番号は「3」になります。
以下のサンプルプログラムは、3番目のカメラにアクセスし、そこから取得したリアルタイムの映像ストリームをウィンドウに表示します。
サンプルコード
#include<opencv2/opencv.hpp>//VideoCaptureクラスを使うためのOpenCVヘッダー//
#include<iostream>
using namespace std;
using namespace cv;
int main() {
Mat myImage;//フレームを読み込むための行列を宣言//
namedWindow("Video Player");//映像を表示するウィンドウを宣言//
VideoCapture cap(3);//3番目のカメラからフレームを取得するオブジェクトを宣言//
if (!cap.isOpened()){ //映像ストリームが見つからない場合はエラーを表示//
cout << "No video stream detected" << endl;
system("pause");
return -1;
}
while (true){ //映像を表示し続けるための無限ループ//
cap >> myImage;
if (myImage.empty()){ //フレームが取得できなければループを抜ける//
break;
}
imshow("Video Player", myImage);//映像を表示//
char c = (char)waitKey(25);//25ミリ秒の処理時間を確保し、終了条件を判定//
if (c == 27){ //'Esc'キーが押されたらループを抜ける//
break;
}
}
cap.release();//バッファメモリを解放//
return 0;
}
実行結果

補足:カメラ番号の指定について
カメラ番号はOSやドライバによる認識順序に依存するため、環境によって同じ番号でも別のデバイスが割り当てられることがあります。意図したカメラが開けない場合は、「0」「1」「2」など別の番号を試してみてください。また、cap.isOpened() によるオープンの確認は、カメラが正しく利用可能かどうかを判断するために非常に重要なチェックです。プログラム終了前には cap.release() を呼び出して、カメラリソースを必ず解放しましょう。
-
C++とOpenCVで二値画像(バイナリイメージ)を反転する方法
二値画像(バイナリイメージ)の反転とは、ピクセル値を逆転させる処理のことです。視覚的な観点から見ると、二値画像を反転させると、白いピクセルは黒へ、黒いピクセルは白へと変換されます。この処理は、主に3つの関数を組み合わせて実現します。それぞれの手順を順番に見ていきましょう。ステップ1:カラー画像をグレースケールに変換するまず、cvtColor()関数を使って元の画像をグレースケール画像に変換します。この関数の基本形は次の通りです。cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);ステップ2:グレースケール画像を二値化する続いて、グ
-
C++とOpenCVでバイナリ画像(二値画像)を作成する方法を解説
バイナリ画像(二値画像)とは、黒と白の2色のみで表現されるデジタル画像のことです。画像処理の観点から見ると、バイナリ画像は「0」と「1」という2つの値しか持たないピクセルで構成されています。ピクセルの値が0の場合は純粋な黒を、値が1の場合は純粋な白を表します。グレースケール画像では、各ピクセルが256段階の異なる値を持つのに対し、バイナリ画像では2つの値しか存在しません。このシンプルさゆえに、バイナリ画像はさまざまな用途で活用されています。例えば、モルフォロジー変換(形態学的処理)ではバイナリ画像が必要であり、背景から物体の形状を抽出する処理にもバイナリ画像が用いられます。OpenCVを使用す