• 用OpenCVSharp来生成棋盘格图片


    我发现,有很多人都在研究相机的标定,里面会经常用到棋盘,这里我们就用OpencvSharp来自己做一个棋盘函数。

    直接上代码。

     1  /// <summary>
     2         /// 用于生成标准棋盘格的函数
     3         /// </summary>
     4         /// <param name="imgw"></param>
     5         /// <param name="imgh"></param>
     6         /// <param name="chesss_size"></param>单个棋盘格子的大小
     7         /// <param name="board_width"></param>棋盘的宽的格子数量
     8         /// <param name="board_height"></param>棋盘的高的格子数量
     9         /// <param name="savepath"></param>
    10         /// <param name="imgformat"></param>代表图片格式,枚举型
    11         public static void GenChessBoard(int imgw,int imgh,int chesss_size,int board_width_count,int board_height_count,string savename, Imgformat imgformat= Imgformat.Jpg)
    12         {
    13             try
    14             {
    15                 Mat Targermat = new Mat(imgh, imgw, MatType.CV_8UC1, Scalar.White);
    16                 int startrow = (imgh - board_height_count * chesss_size) / 2;
    17                 int startcol = (imgw - board_width_count * chesss_size) / 2;
    18                 bool initialvalue = true;
    19                 bool col_color = true;
    20                 int rowcout = 0;
    21                 int colcout = 0;
    22                 for (int row = startrow; row < (startrow + board_height_count * chesss_size); row++)
    23                 {
    24                     rowcout++;
    25                     for (int col = startcol; col < (startcol + board_width_count * chesss_size); col++)
    26                     {
    27                         if (col_color)
    28                         {                         
    29                             Targermat.SetArray(row, col, new byte[] { 0 });
    30                         }                       
    31 
    32 
    33                         colcout++;
    34                         if (colcout == chesss_size && col != (startcol + board_width_count * chesss_size - 1))
    35                         {
    36                             col_color = !col_color;
    37                             colcout = 0;
    38                         }
    39                     }
    40 
    41                     if (rowcout == chesss_size)
    42                     {
    43                         initialvalue = !initialvalue;
    44                         rowcout = 0;
    45 
    46                     }
    47                     colcout = 0;
    48                     col_color = initialvalue;
    49                 }
    50                 if(imgformat== Imgformat.Jpg)
    51                 {
    52                     Targermat.SaveImage(savename + ".jpg");
    53                 }
    54                 else if(imgformat == Imgformat.Bmp)
    55                 {
    56 
    57                     Targermat.SaveImage(savename + ".bmp");
    58                 }
    59                 Targermat.Dispose():
    60 
    61             }
    62             catch(Exception ex)
    63             {
    64                 throw (ex);
    65 
    66             }            
    67         }
      public enum Imgformat
        {
            Jpg=0,
            Bmp=1
        }

    直接调用,然后生成棋盘图片

     MyCalibration.GenChessBoard(1280, 720, 50, 10, 8, @"D:chesstest");

    或者生成BMP格式。

    MyCalibration.GenChessBoard(1280, 720, 50, 10, 8, @"D:chesstest",Imgformat.Bmp);

    效果图如下:(jpg)

    BMP效果也和上面类似。

  • 相关阅读:
    为什么富人越来越富,穷人越来越穷?
    计算几何基础_点_向量_极角排序
    滑窗模板_双向队列
    后缀数组
    AC自动机
    RMQ_ST表
    二叉树求逆序对(伪AC 23333)
    分块
    莫队
    树状数组_二维
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/11569292.html
Copyright © 2020-2023  润新知