使用OpenCV生成标定板图片,然后找打印机进行打印,贴在硬板上,就可以得到一个简易的标定板。
DPI是指屏幕上每个英寸上多少个像素点,涉及到打印出来实际的大小。
效果如下:

//编程环境: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;
}
版权声明:本文为weixin_43053387原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。