赤色検出した場合の判断をどのようにすればいいかわかりません。
現在書いているプログラムは下記のようなものになります。
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(void) {
VideoCapture camera;//cameraは映像ソースを表現するためのオブジェクト
camera.open(0);//映像ソースとして0番目のカメラを指定
camera.set(CAP_PROP_FRAME_WIDTH, 384);//サイズ(幅)を変えるためのもの
camera.set(CAP_PROP_FRAME_HEIGHT, 288);//サイズ(高さ)を変えるためのもの
//初期値の設定
int hueMin = 150;
int hueMax = 179;
int satMin = 64;
int satMax = 255;
int valMin = 0;
int valMax = 255;
//二値化処理
int threshold_value = 127;
//クロージング・オープニング処理
int opening = 0;
int closing = 0;
namedWindow("Slider");//"Slider"という名前のウィンドウを生成
resizeWindow("Slider", 600, 400);//ウィンドウのサイズ
//ウィンドウにスライダバーの追加
createTrackbar("Threshold", "Slider", &threshold_value, 256);
createTrackbar("Closing", "Slider", &closing, 10);
createTrackbar("Opening", "Slider", &opening, 10);
Mat rgbImage, grayImage, hsvImage, maskImage, backgroundImage, diffImage;
while (1) {
//Mat rgbImage, grayImage, hsvImage, maskImage, backgroundImage, diffImage;
camera >> rgbImage;
imshow("Color Image", rgbImage);
cvtColor(rgbImage, hsvImage, CV_BGR2HSV);//入力画像の色表現を変換する
inRange(hsvImage, Scalar(hueMin, satMin, valMin), Scalar(hueMax, satMax, valMax), maskImage);//入力画像の各画素値が指定された範囲内にあるかどうかを判定
cvtColor(rgbImage, grayImage, CV_BGR2GRAY);//BGR画像から濃淡画像へ変換
imshow("Gray Image", grayImage);
//背景画像が得られているときはfalse
if (backgroundImage.empty() == false) {
absdiff(grayImage, backgroundImage, diffImage);//grayImageとbackgroundImageの差
imshow("Difference", diffImage);
threshold(diffImage, maskImage, (double)threshold_value, 255, THRESH_BINARY);//diffImageの画素値がthreshold_valueを超える時255,それ以下では0
dilate(maskImage, maskImage, Mat(), Point(-1, -1), closing);//膨張処理
erode(maskImage, maskImage, Mat(), Point(-1, -1), closing + opening);//縮小処理
dilate(maskImage, maskImage, Mat(), Point(-1, -1), opening);//膨張処理
imshow("Mask", maskImage);
Mat resultImage(rgbImage.rows,rgbImage.cols, CV_8UC3);
resultImage.setTo(Scalar(0, 0, 0));//resultImage全体を(0, 0, 0)に設定
rgbImage.copyTo(resultImage, maskImage);//maskImageをマスク画像として、rgbImageからresultImageにコピー
imshow("ChromaKey Image", resultImage);
}
int key = waitKey(1);
if (key == 'q') break;
else if (key == 's') {
grayImage.copyTo(backgroundImage);
imshow("Background", backgroundImage);
}
}
return 0;
}