【opencv】openCV生成标定相机用的黑白棋盘
2017-05-16 11:28
831 查看
本程序是OPENCV1.0版本的
下面是源代码:
/*******************************************************************************
*此程序用来自制一个标定用的测试方格
*******************************************************************************/
#include <highgui.h>
#include <stdio.h>
4000
int blockSide; //方格的边长
int count = 1; //图像个数
int calculate(void);
int main()
{
while (1)
{
calculate();
/*
if (calculate())
{
break;
}
*/
}
system("pause");
return 0;
}
int calculate(void)
{
int m, n;
int i, j;
int flag = 0;
char ch = '\0';
char str[11] = {'t', 'e', 'x', 't'}; //图像名称
IplImage *img = NULL;
unsigned char *data = NULL; //指向图像矩阵首地址的指针
unsigned char *temp = NULL;
unsigned char *dstPoint = NULL;//指向要操作的元素
m = n = j = i = 0;
printf("请输入方格的边长:\n");
scanf("%d", &blockSide);
printf("请输入标定块的行和列:\n");
scanf("%d%d", &m, &n);
img = cvCreateImage(
cvSize(blockSide*n, blockSide*m),
IPL_DEPTH_8U,
1
);
data = (unsigned char *)img->imageData;
for (i = 0; i < n; i++)
{
for ( j = 0; j < m; j++)
{
flag = i + j;
/*
if (i == m-1 || j == n-1)
{
flag*/
temp = data + img->widthStep * blockSide * j + blockSide * i;
if ( flag % 2)
{
for (int k = 0; k < blockSide; k++)
{
for ( int k1 = 0; k1 < blockSide; k1++)
{
dstPoint = temp + k1 * img->widthStep + k;
*dstPoint = 255;
}
}
}
else
{
for (int k = 0; k < blockSide; k++)
{
for ( int k1 = 0; k1 < blockSide; k1++)
{
dstPoint = temp + k1 * img->widthStep + k;
*dstPoint = 0;
}
}
}
dstPoint = NULL; //重新置零
}
}
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);//创建一个窗口
cvShowImage("Image", img);//显示图片
cvWaitKey(0);
getchar();
printf("是否保存图像?<Y/N>(按q退出):");
scanf("%c", &ch);
if (ch == 'q' || ch == 'Q')
{
exit(0);
}
else if (ch == 'Y' || ch == 'y')
{
str[4] = count / 10 + '0';
str[5] = count++ % 10 + '0';
cvSaveImage(strcat(str, ".jpg"), img);
printf("图片保存为当前工作目录下的%s\n", str);
return 1;
}
else
{
return 0;
}
//cvDestroyWindow("Image"); //销毁窗口
}
下面是源代码:
/*******************************************************************************
*此程序用来自制一个标定用的测试方格
*******************************************************************************/
#include <highgui.h>
#include <stdio.h>
4000
int blockSide; //方格的边长
int count = 1; //图像个数
int calculate(void);
int main()
{
while (1)
{
calculate();
/*
if (calculate())
{
break;
}
*/
}
system("pause");
return 0;
}
int calculate(void)
{
int m, n;
int i, j;
int flag = 0;
char ch = '\0';
char str[11] = {'t', 'e', 'x', 't'}; //图像名称
IplImage *img = NULL;
unsigned char *data = NULL; //指向图像矩阵首地址的指针
unsigned char *temp = NULL;
unsigned char *dstPoint = NULL;//指向要操作的元素
m = n = j = i = 0;
printf("请输入方格的边长:\n");
scanf("%d", &blockSide);
printf("请输入标定块的行和列:\n");
scanf("%d%d", &m, &n);
img = cvCreateImage(
cvSize(blockSide*n, blockSide*m),
IPL_DEPTH_8U,
1
);
data = (unsigned char *)img->imageData;
for (i = 0; i < n; i++)
{
for ( j = 0; j < m; j++)
{
flag = i + j;
/*
if (i == m-1 || j == n-1)
{
flag*/
temp = data + img->widthStep * blockSide * j + blockSide * i;
if ( flag % 2)
{
for (int k = 0; k < blockSide; k++)
{
for ( int k1 = 0; k1 < blockSide; k1++)
{
dstPoint = temp + k1 * img->widthStep + k;
*dstPoint = 255;
}
}
}
else
{
for (int k = 0; k < blockSide; k++)
{
for ( int k1 = 0; k1 < blockSide; k1++)
{
dstPoint = temp + k1 * img->widthStep + k;
*dstPoint = 0;
}
}
}
dstPoint = NULL; //重新置零
}
}
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);//创建一个窗口
cvShowImage("Image", img);//显示图片
cvWaitKey(0);
getchar();
printf("是否保存图像?<Y/N>(按q退出):");
scanf("%c", &ch);
if (ch == 'q' || ch == 'Q')
{
exit(0);
}
else if (ch == 'Y' || ch == 'y')
{
str[4] = count / 10 + '0';
str[5] = count++ % 10 + '0';
cvSaveImage(strcat(str, ".jpg"), img);
printf("图片保存为当前工作目录下的%s\n", str);
return 1;
}
else
{
return 0;
}
//cvDestroyWindow("Image"); //销毁窗口
}
相关文章推荐
- matlab生成黑白棋盘格,用于相机标定
- 用matlab生成黑白棋盘格作相机标定模板
- 用matlab生成黑白棋盘格作相机标定模板
- matlab生成黑白棋盘格,用于相机标定
- opencv生成摄像头标定的黑白方格
- [opencv] 生成标定棋盘格
- Opencv学习笔记 ---opencv生成摄像头标定棋盘
- OpenCV生成标定图(棋盘格)
- matlab与opencv双目相机标定对比
- 聊一聊OpenCV相机标定
- 用VISP+Opencv做相机到机械臂的标定
- 用opencv做棋盘格的标定
- Opencv 张正友相机标定傻瓜教程
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
- 单目相机 双目相机 OpenCV 标定求内外参数 笔记留着需要的时候用
- OpenCV相机标定
- 基于opencv的相机之图像保存异常/模糊背景/黑白背景(四)
- opencv学习笔记(二十六)——相机标定之棋盘提取角点
- 五、(2)相机标定_OpenCV&Matlab
- opencv-相机标定步骤、评估标定误差以及标定之后图像坐标到世界坐标的转换