yasuhirohoshino
12/27/2016 - 5:31 AM

find homography in openFrameworks

find homography in openFrameworks

#pragma once
#include "ofxCv.h"

class Homography {
public:
	ofMatrix4x4 getHomography(cv::vector<cv::Point2f> cvSrcPos, cv::vector<cv::Point2f> cvDstPos) {
		ofMatrix4x4 homographyMat;
		cv::Mat homography = cv::findHomography(cvSrcPos, cvDstPos);
		homographyMat.getPtr()[0] = homography.at<double>(0, 0);
		homographyMat.getPtr()[4] = homography.at<double>(0, 1);
		homographyMat.getPtr()[12] = homography.at<double>(0, 2);

		homographyMat.getPtr()[1] = homography.at<double>(1, 0);
		homographyMat.getPtr()[5] = homography.at<double>(1, 1);
		homographyMat.getPtr()[13] = homography.at<double>(1, 2);

		homographyMat.getPtr()[3] = homography.at<double>(2, 0);
		homographyMat.getPtr()[7] = homography.at<double>(2, 1);
		homographyMat.getPtr()[15] = homography.at<double>(2, 2);
		return homographyMat;
	}

	ofMatrix4x4 getHomography(vector<ofVec2f> srcPos, vector<ofVec2f> dstPos) {
		cv::vector<cv::Point2f> cvSrcPos, cvDstPos;
		for (auto p : srcPos) {
			cvSrcPos.push_back(cv::Point2f(p.x, p.y));
		}
		for (auto p : dstPos) {
			cvDstPos.push_back(cv::Point2f(p.x, p.y));
		}
		return getHomography(cvSrcPos, cvDstPos);
	}
};