opencv自己生成标定板

使用OpenCV生成标定板图片,然后找打印机进行打印,贴在硬板上,就可以得到一个简易的标定板。
DPI是指屏幕上每个英寸上多少个像素点,涉及到打印出来实际的大小。
效果如下:
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181211161545832.jpg

![在这里插入图片描述](https://img-blog.csdnimg.cn/20181211165912375.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzA1MzM4Nw==,size_16,color_FFFFFF,t_70)

//编程环境:ubuntu16.04, qt,OpenCV3.1.16
#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\opencv.hpp> 
using namespace std;
using namespace cv;
int main(){ 
    //单位转换
int dot_per_inch = 96;  //我的电脑是96DPI(dot per inch)
double cm_to_inch = 0.3937; //1cm=0.3937inch
double inch_to_cm = 2.54;   //1inch = 2.54cm
double inch_per_dot = 1.0 / 96.0;

    //自定义标定板
double blockSize_cm = 2; //方格尺寸:边长2cm的正方形
//设置横列方框数目
    int blockcol=8;
    int blockrow=10;


int blockSize = (int)(blockSize_cm /inch_to_cm *dot_per_inch);
cout << blockSize << endl;

int imageSize = blockSize * blockNum;
int imagesizecol=blockSize*blockrow;
int imagesizerow=blockSize*blockcol;
cout << imageSize << endl;
Mat chessBoard(imagesizecol, imagesizerow, CV_8UC3, Scalar::all(0));
unsigned char color = 0;

for (int i = 0; i < imagesizerow; i = i + blockSize){
    color = ~color;
    for (int j = 0; j < imagesizecol; j = j + blockSize){
        Mat ROI = chessBoard(Rect(i, j, blockSize, blockSize));
        ROI.setTo(Scalar::all(color));
        color = ~color;
    }
}
imshow("Chess board", chessBoard);
imwrite("/home/shangbinbin/opencv_linux_test/test1/chessBoard3.jpg",chessBoard);

	cvWaitKey(0);
        return 0;
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值