用opencv计算棋盘格内角点坐标(通过多个内角点获得转换矩阵),并同时用halcon和opnecv对图像进行透视变换

本篇主要是为了方便以后查找,所以直接贴代码。程序基本思路是,用opencv计算棋盘格内角点坐标(垂直拍摄和倾斜拍摄,再通过获得的垂直内角点坐标和倾斜内角点坐标计算出转换矩阵。)为了比较halcon和opencv的校正效果,程序同时用opencv和halcon对图像进行校正。

#include "stdafx.h"
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include 
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include 
#include "halconcpp.h"
using namespace HalconCpp;
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
	HTuple originalcornersX,originalcornersY,leancornersX,leancornersY;//halcon中用于保存角点变量
	ofstream oFileExcel1;
	ofstream oFileExcel2;
	string strExcel1="垂直角点.csv";
	oFileExcel1.open(strExcel1.c_str(), ios::out | ios::trunc);//保存垂直拍摄靶标的角点
	string strExcel2="倾斜拍摄.csv";
	oFileExcel2.open(strExcel2.c_str(), ios::out | ios::trunc);//保存倾斜拍摄靶标的角点

	cv::Mat  calibmat[2];//两个存储图像
	std::vector pointscz,pointsqx;//角点
	int width ,height;//图像长宽

	 calibmat[0]=imread("C:\\Users\\Administrator\\Desktop\\7_7自定义标定板2\\cz16cm0.bmp",4);//读取垂直标定图像
	 calibmat[1]=imread("C:\\Users\\Administrator\\Desktop\\7_7自定义标定板2\\x30_0.bmp",4);//读取倾斜标定图像

	//############opencv计算内角点坐标,并将坐标传给halcon变量#########################################
	width=calibmat[0].cols;
	height=calibmat[1].rows;
	bool iffindpointcz,iffindpointqx;
	//计算垂直拍摄的标定板中内角点坐标
	iffindpointcz=findChessboardCorners(calibmat[0],cv::Size(9,7),pointscz,CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK);
	if(iffindpointcz)
	{
		//cornerSubPix(calibmat[0],points,cv::Size(5,5),Size(-1,-1),TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER,40,0.001 ));
		if(iffindpointcz)//亚像素提取
		{
			drawChessboardCorners(calibmat[0],cv::Size(7,9),pointscz,true); //用于在图片中标记角点 
            imwrite("垂直角点图.bmp",calibmat[0]);//保存角点图
			for(int i=0;i

欢迎扫码关注我的微信公众号

在这里插入图片描述

你可能感兴趣的:(Halcon,#,OpenCV其他)