C/C++でOpenCVを使ったチェスボード画像の作成

規則性あるし、自動生成できるよねってことでソース書いた

OpenCVを設定して
これをchessboard.hというファイルを作ってそこにコピペすればいいだけです

//
// chessboard.h
// 
// Created by tanjoin on 01/23/13.
// Copyright 2013 tanjoin. All rights reserved.
//

#ifndef CHESSBOARD_H_
#define CHESSBOARD_H_

// OpenCV Library
#include <opencv2/opencv.hpp>

class Chessboard
{
public:
    
  // チェースボードを作成する
  static void create(const cv::Size& image_size, 
                     const cv::Size& block_size, 
                     const cv::Vec3b& color, 
                     cv::Mat& dst) {

    dst = cv::Mat(image_size, CV_8UC3);
    bool x_flag = false;
    bool y_flag = false;

    for (int y = 0; y < image_size.height; y++) {

      if (y % block_size.height == 0) {
        y_flag = !y_flag;
      }
      x_flag = y_flag;

      for (int x = 0; x < image_size.width; x++) {

        if (x % block_size.width == 0) {
          x_flag = !x_flag;
        }

        if (x_flag) {
          dst.at<cv::Vec3b>(y, x) = color;
        } else {
          dst.at<cv::Vec3b>(y, x) = cv::Vec3b(255, 255, 255);
        }

      }

    }

  }

};

#endif // CHESSBOARD_H_


サンプル実行結果

//
// main.cpp
// 
// Created by tanjoin on 01/17/23.
// Copyright 2013 tanjoin. All rights reserved.
//

// C++ Library
#include <cstdlib>

// Own Library
#include "chessboard.h"
int main(void) {

  cv::Mat dst;
  Chessboard::create(cv::Size(300, 300), cv::Size(10, 10), cv::Vec3b(127, 127, 127), dst);
  cv::Mat dst2;
  Chessboard::create(cv::Size(200, 200), cv::Size(150, 150), cv::Vec3b(127, 127, 127), dst2);
  cv::Mat dst3;
  Chessboard::create(cv::Size(100, 200), cv::Size(10, 50), cv::Vec3b(127, 127, 127), dst3);
  cv::imshow("dst", dst);
  cv::imshow("dst2", dst2);
  cv::imshow("dst3", dst3);
  cv::waitKey(0);

  return EXIT_SUCCESS;
}

dst

dst2

dst3

広告を非表示にする