###前提・実現したいこと
visual studio2015でopencvを使い、信号機を認識したいと思っています。
赤一色は認識できたが、赤と同時に信号機の輪郭の灰色も認識したいです。
###発生している問題・エラーメッセージ
サンプルコードを利用し、赤と青を認識するものはできたが実行結果が二つに分かれてしまう。この色の認識を青から灰色に変更し、同時に結果を表示できるのが理想です。
エラーメッセージ
###該当のソースコード
C++
#include "stdio.h"
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image_src = imread("toilet.jpg");
namedWindow("原画像");
imshow("原画像", image_src);
Mat image_hsv; cvtColor(image_src, image_hsv, COLOR_BGR2HSV); Mat channels[3]; split(image_hsv, channels); int width = image_src.cols; int height = image_src.rows; Mat image_red = Mat(Size(width, height), CV_8UC1); Mat image_blue = Mat(Size(width, height), CV_8UC1); uchar hue, sat; for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) { hue = channels[0].at<uchar>(y, x); sat = channels[1].at<uchar>(y, x); if ((hue < 8 || hue > 168) && sat > 100) image_red.at<uchar>(y, x) = 0; else image_red.at<uchar>(y, x) = 255; if ((hue > 97 && hue < 117) && sat > 100) image_blue.at<uchar>(y, x) = 0; else image_blue.at<uchar>(y, x) = 255; } namedWindow("赤検出画像"); imshow("赤検出画像", image_red); namedWindow("青検出画像"); imshow("青検出画像", image_blue); waitKey(0); destroyAllWindows(); return 0;
}
###試したこと
namadWindowを1つにすれば結果は1つになるのではないかと考え、消してみたが、結果は一色のみの結果が表示されるというものでした。
###補足情報(言語/FW/ツール等のバージョンなど)
C++
visual studio2015
opencv2.4
回答1件
あなたの回答
tips
プレビュー