• 相机标定棋盘格制作


    #include <opencv2/opencv.hpp>
    #include <iostream>
    
     /** 输出指定格式的棋盘图
        @param width 棋盘的宽度,不要超过10000.
        @param height 棋盘的高度,不要超过10000.
        @param pixel 每个格子的大小,建议行和列的格子数一个为奇数一个为偶数
        @param fileName 输出的文件名,支持相对路径和绝对路径,支持png、jpg、bmp等.
        */
    static int checkerboard(int width, int height, int pixel, const char* fileName)
    {
        if (width > 0 && height > 0 && pixel > 0 && width <= 10000 && height <= 10000 && pixel <= width && pixel <= height && fileName)
        {
            cv::Mat image = cv::Mat::zeros(cv::Size(width, height), CV_8U);
            uchar* uc = image.data;
            for (size_t j = 0; j < height; j++)
            {
                for (size_t i = 0; i < width; i++)
                {
                    if ((i / pixel + j / pixel) % 2)
                    {
                        uc[j * width + i] = 255;
                    }
                }
            }
            imwrite(fileName, image);
            return 0;
        }
        return -1;
    }
    
    int main(int argc, char** argv)
    {
        int result = -1;
        int width = 0;
        int height = 0;
        int pixel = 0;
        const char* fileName = nullptr;
    
        if (argc == 5)
        {
            try
            {
                width = std::stoi(argv[1]);
                height = std::stoi(argv[2]);
                pixel = std::stoi(argv[3]);
                fileName = argv[4];
                result = checkerboard(width, height, pixel, fileName);
            }
            catch (const std::exception&)
            {
                std::cout << "输入格式错误" << std::endl;
            }
        }
    
        if (result == 0)
        {
            std::cout << "生成棋盘图并保存成功" << std::endl;
        }
        else
        {
            std::cout << "保存棋盘图失败" << std::endl;
            std::cout << "用法:" << std::endl;
            std::cout << "CheckerBoard.exe width height pixel fileName" << std::endl;
        }
        return result;
    }

     使用这个程序生成一张png格式的图片,不要直接打印,效果不好。用matlab读入并显示,然后另存为PDF文件再打印效果会比较好。

    注意:

    1.棋盘格行和列的数量不要同时为奇数或偶数,否则标定的时候matlab会给出警告并且标定结果可能错误。一个合法的参数:.CheckerBoard.exe 500 450 50 10x9.png

    2.打印后用尺子量一下格子的大小,算出来的结果可能不准,标定的时候要用到。

    3.用matlab标定。

    CheckerBoard.exe下载


    需要自己下载OpenCV3.4.7,安装后将opencv_world347.dll(vc15版,x64)拷贝到同一个目录下,同时还要安装vc15的运行库。

  • 相关阅读:
    [UVa514] Rails
    今日才真正懂了BFS
    [UVa11292] Dragon of Loowater
    [UVa] TEX Quotes
    白书杂七杂八
    [OpenJudge] Feed_Accounting
    [OpenJudge] Jolly_Jumpers
    Restart
    Collection of Websites
    Oracle11完全卸载方法
  • 原文地址:https://www.cnblogs.com/ALittleDruid/p/11743014.html
Copyright © 2020-2023  润新知