原创

opencv自己生成标定板

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://ailearning.blog.csdn.net/article/details/84957042

使用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;
}
文章最后发布于: 2018-12-11 16:18:11
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览