黒と白の数を数えてどちらの方が多いかまではできたのですが一つ一つ白黒を出力していく方法がわかりません。
入力画像
出力例
このように出力したいです
c++
//略 int main(int argc, const char * argv[]){ //画像変数の宣言 cv::Mat src_img, gray_img, dst_img, bin_img, bin_img2, tmp_img; //変数宣言 int ku, si; std::vector<std::vector<cv::Point>> contours; std::vector<std::vector<cv::Point>> contours2; //1. 入力画像をカラーで入力 src_img = cv::imread(FILE_NAME, cv::IMREAD_COLOR); if (src_img.empty()) {//入力失敗の場合 fprintf(stderr, "Cannot read image file: %s.\n", FILE_NAME); return (-1); } dst_img = cv::Mat::zeros(src_img.size(), CV_8UC1); //2. グレースケール画像 cv::cvtColor(src_img, gray_img, cv::COLOR_BGR2GRAY); //3. 二値化 cv::threshold(gray_img, bin_img, TH, MAX_VAL, cv::THRESH_BINARY_INV); cv::threshold(gray_img, bin_img2, TH2, MAX_VAL, cv::THRESH_BINARY); //4. 膨張縮小処理 cv::dilate(bin_img, bin_img, cv::Mat(), cv::Point(-1,-1), COUNT); cv::erode(bin_img, bin_img, cv::Mat(), cv::Point(-1,-1), COUNT*2); cv::dilate(bin_img, bin_img, cv::Mat(), cv::Point(-1,-1), COUNT); cv::dilate(bin_img2, bin_img2, cv::Mat(), cv::Point(-1,-1), COUNT); cv::erode(bin_img2, bin_img2, cv::Mat(), cv::Point(-1,-1), COUNT*2); cv::dilate(bin_img2, bin_img2, cv::Mat(), cv::Point(-1,-1), COUNT); //5.黒のコマの数を検出 tmp_img = bin_img.clone(); cv::findContours(tmp_img, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); std::cout << "黒 = " << contours.size() << std::endl; ku = contours.size(); //6.白のコマの数を検出 tmp_img = bin_img2.clone(); cv::findContours(tmp_img, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); std::cout << "白 = " << contours.size() << std::endl; si = contours.size(); //7.どちらが勝ったかの測定 if(ku>si){ std::cout << "黒の勝ち\n"; }else if(si<ku){ std::cout << "白の勝ち\n"; }else{ std::cout << "引き分け\n"; } return 0; }
まだ回答がついていません
会員登録して回答してみよう