背景差分で、赤色の時のみ表示させるというプログラムを書きたいのですが、
どのように赤色だけ表示させたらいいかわかりません...
以下背景差分のプログラムは書けたのですが、赤色だけ抽出する方法を教えていただきたいです。
Visual Studioで実行しています。
c++
1#include <opencv2/opencv.hpp> 2 3using namespace std; 4using namespace cv; 5 6int main(void) { 7 8 VideoCapture camera; //cameraは映像ソースを表現するためのオブジェクト 9 camera.open(0); //映像ソースとして0番目のカメラを指定 10 //VideoCapture.camera(0);の書き方でもok 11 camera.set(CAP_PROP_FRAME_WIDTH, 384);//サイズを変えるためのもの(有でも無でも) 12 camera.set(CAP_PROP_FRAME_HEIGHT, 288);//サイズを変えるためのもの(有でも無でも) 13 14 int threshold_value = 127; 15 int opening = 0; 16 int closing = 0; 17 18 namedWindow("Slider");//"Slider"という名前のウィンドウを生成 19 resizeWindow("Slider", 600, 300);//ウィンドウのサイズ 20 //ウィンドウにスライダバーを追加する 21 createTrackbar("Threshold", "Slider", &threshold_value, 256); 22 createTrackbar("Closing", "Slider", &closing, 10); 23 createTrackbar("Opening", "Slider", &opening, 10); 24 25 Mat rgbImage, grayImage, backgroundImage, diffImage, maskImage; 26 27 while (1) { 28 29 camera >> rgbImage; 30 imshow("Color Image", rgbImage); 31 32 cvtColor(rgbImage, grayImage, CV_BGR2GRAY);//BGR画像から濃淡画像へ変換 33 imshow("Gray Image", grayImage); 34 35 //背景画像が得られているときはfalse 36 if (backgroundImage.empty() == false) { 37 38 absdiff(grayImage, backgroundImage, diffImage);//grayImageとbackgroundImageの差 39 imshow("Difference", diffImage); 40 threshold(diffImage, maskImage, (double)threshold_value, 255, THRESH_BINARY);//diffImageの画素値がthreshold_valueを超える時255,それ以下では0 41 42 dilate(maskImage, maskImage, Mat(), Point(-1, -1), closing);//膨張処理 43 erode(maskImage, maskImage, Mat(), Point(-1, -1), closing + opening);//縮小処理 44 dilate(maskImage, maskImage, Mat(), Point(-1, -1), opening);//膨張処理 45 imshow("Mask", maskImage); 46 47 Mat resultImage(rgbImage.rows, rgbImage.cols, CV_8UC3); 48 resultImage.setTo(Scalar(0, 0, 0));//resultImage全体を(0, 0, 0)に設定 49 rgbImage.copyTo(resultImage, maskImage);//maskImageをマスク画像として、rgbImageからresultImageにコピー 50 imshow("ChromaKey Image", resultImage); 51 } 52 53 int key = waitKey(1); 54 if (key == 'q') break; 55 else if (key == 's') { 56 57 grayImage.copyTo(backgroundImage); 58 imshow("Background", backgroundImage); 59 } 60 } 61 62 return 0; 63}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。