前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >相机标定黑白格纸生成(提供PDF版下载)

相机标定黑白格纸生成(提供PDF版下载)

作者头像
小白学视觉
发布2019-10-24 14:36:46
7.9K1
发布2019-10-24 14:36:46
举报

小白近期对相机进行了标定,关于相机标定的原理和方法网上比较多,讲解也比较详细,这里小白也就不再重复,如果有对原理不是很清晰的小伙伴,可以后台私密我。

小白在ROS上安装标定工具,使用黑白方格进行标定。因为好久好久之前小白对其他的相机标定过,印象中电脑里面存了黑白格纸的电子版。但是很不幸,最后没有找到。于是小白决定用代码自己生成一个黑白标定纸,小白整理了利用matlab和OpenCV两种方法,并为小伙伴提供PDF版,供大家下载直接使用

Matlab版

代码语言:javascript
复制
I=checkerboard(100);
figure,imshow(I>0.5)
imwrite((I>0.5),'calibration');

其中100表示每个方格大边长为100个像素,注意这个I>0.5是为了让显示的棋盘亮度统一,否则会发现一半一半

如果小伙伴对代码有执着的追求的话,小白也为大家提供了一种通过自主编写代码实现的程序

代码语言:javascript
复制
function M = writeChessBoard( width, height, size, xnum, ynum, position, background)
% This function writes a chessboard on image.
% 该方程创建一个棋盘格图像。
%参数解释:
%   width: 宽度
%   height:高度
%   size:单个小方块的大小
%   xum:x方向上的个数(每4个小方块一组)
%   xum:x方向上的个数(每4个小方块一组)
%   position:起始位置的坐标(为了留出边,便于打印)
%   background:背景亮度, 0<=background<=1, 0表示纯黑,1表示纯白
 
    M=ones(width,height);
    M(:)=background;
    block=size*2;
    for i=1:xnum,
        for j=1:ynum,
            pos=[position(1)+block*(i-1), position(2)+block*(j-1)];
            M=ChessBoard(M,size,pos);
        end
    end    
end

OpenCV版

小白为小伙伴提供了两个OpenCV版本的程序

代码语言:javascript
复制
#include <iostream>
#include<opencv2/opencv.hpp>

//行数
#define x 9
//列数
#define y 9
//格子大小
#define size 100

int main()
{
    IplImage* image = cvCreateImage(cvSize(x*size, y*size), 8, 1);
    ///生成黑白条
    for (int i = 0; i<image->height; i++)
    {
        uchar* data = (uchar*)image->imageData + image->widthStep*i;
        for (int j = 0; j<image->width; j++)
        {
            if ((j / size) % 2 == 1)
                *data = 255;//白色
            else
                *data = 0;//黑色
            data++;
        }
    }
    //生成棋盘格
    for (int i = 0; i<image->height; i++)
    {
        if ((i / size) % 2 == 1)
        {
            uchar* data = (uchar*)image->imageData + image->widthStep*i;
            for (int j = 0; j<image->width; j++)
            {
                *data = 255 - *data;
                data++;
            }
        }
    }
    cvShowImage("image",image);
    cvWaitKey();
    cvSaveImage("chessboard.jpg", image);
}

/*
作者:lwqbrell 
来源:CSDN 
原文:https://blog.csdn.net/lwqBrell/article/details/70880670?utm_source=copy 
*/
代码语言:javascript
复制
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
 
using namespace cv;
using namespace std; 
 
int main()
{
    Size ImageSize = Size(960, 1260);
    Mat src(ImageSize.width,ImageSize.height,CV_8UC1,Scalar(0));
    namedWindow("src", CV_WINDOW_NORMAL);
    imshow("src", src);
 
    int width = 140;
    int height = 140;
    for (int i = 0; i < src.rows; i++)
    {
        for (int j = 0; j < src.cols; j++)
        {
            if ((i / width + j / height)%2 != 0)
            {
                src.at<uchar>(i, j) = 255;
            }
            else
            {
                src.at<uchar>(i, j) = 0;
            }
        }
    }
    namedWindow("result", CV_WINDOW_NORMAL);
    imshow("result", src);
    imwrite("result.bmp", src);
    waitKey(0);
    return 0; 
}

运行生面的程序便可以生成我们需要的黑白格,再用直接用打印机打印就ok了。

A4纸打印变长2.65cm网格纸

https://pan.baidu.com/s/10hmIYeVzAfXcK-kACed_9g

A4纸打印边长2.45cm网格纸

https://pan.baidu.com/s/1HaR27e01EPkJiTYcdxAAbA

鉴于之前分享的资源有部分链接失效,为了方便维护链接,也可以后台回复“标定纸”来获取链接

相关阅读:

一起学习二维码(二)配置解码环境

一起学习二维码(一)生成自己的二维码

使用Matlab图像处理(五)——边缘提取

使用Matlab图像处理(四)——常用滤波的实现

使用Matlab图像处理(三)——图像滤波原理

使用Matlab图像处理(二)

使用Matlab图像处理(一)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档