当前位置: 首页>>代码示例>>C++>>正文


C++ Mat::cross方法代码示例

本文整理汇总了C++中cv::Mat::cross方法的典型用法代码示例。如果您正苦于以下问题:C++ Mat::cross方法的具体用法?C++ Mat::cross怎么用?C++ Mat::cross使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在cv::Mat的用法示例。


在下文中一共展示了Mat::cross方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: determinePlaneRotation

Mat TableObjectDetector::determinePlaneRotation(cv::Mat normal) {
    // Graham Schmidt orthogonalization
    int mind = 0; double mval = 999;
    for (int i=0; i<3; i++) {
        if (abs(normal.at<double>(i)) < mval) {
            mind = i;
            mval = abs(normal.at<double>(i));
        }
    }
    
    Mat vstart = -mval*normal;
    vstart.at<double>(mind) = 1;
    vstart = vstart/cv::norm(vstart);
    Mat v2 = normal.cross(vstart);
    v2 = v2/cv::norm(v2);
    Mat v3 = normal.cross(v2);
    v3 = v3/cv::norm(v3);
    
    Mat R(3, 3, CV_64F);
    v2.copyTo(R.col(0));
    v3.copyTo(R.col(1));
    normal.copyTo(R.col(2));
    
    return R;
}
开发者ID:bdol,项目名称:eyetrack,代码行数:25,代码来源:TableObjectDetector.cpp

示例2: findRotation

cv::Mat findRotation(cv::Mat v1, cv::Mat v2){
	cv::Mat ab = v1.cross(v2);
	//std::cout << "cross " << ab << std::endl;
	float s = sqrt(ab.at<float>(0,0)*ab.at<float>(0,0) + ab.at<float>(1,0)*ab.at<float>(1,0) + ab.at<float>(2,0)*ab.at<float>(2,0));
	if (s == 0)
		return cv::Mat::eye(3,3,CV_32F);

	float c = v1.at<float>(0,0)*v2.at<float>(0,0) + v1.at<float>(1,0)*v2.at<float>(1,0) + v1.at<float>(2,0)*v2.at<float>(2,0);
	cv::Mat sk = skew(ab);
	return cv::Mat::eye(3,3,CV_32F) + sk + sk*sk*(1-c)/(s*s);
}
开发者ID:Mjiulee,项目名称:face_swap,代码行数:11,代码来源:utility.cpp

示例3: calcLineIntersection

double ScaleEstimator::calcLineIntersection(cv::Mat d1, cv::Mat d2, cv::Mat p2, cv::Mat& ip1) {
	cv::Mat p1(3, 1, CV_64FC1);	p1 = 0.0f;
	cv::Mat ret(3, 1, CV_64FC1);
	double t = 0.0f;
	cv::Mat normalVector = d1.cross(d2);
	t = (p2 - p1).cross(d2).dot(normalVector) / cv::norm(normalVector) / cv::norm(normalVector);
	ret = p1 + t*d1;


	ip1 = ret.clone();
	return cv::norm(normalVector.dot(p2 - p1)) / cv::norm(normalVector);
}
开发者ID:SenYu,项目名称:SLAMTracker,代码行数:12,代码来源:ScaleEstimator.cpp


注:本文中的cv::Mat::cross方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。