本文整理汇总了C++中cv::OutputArray::setTo方法的典型用法代码示例。如果您正苦于以下问题:C++ OutputArray::setTo方法的具体用法?C++ OutputArray::setTo怎么用?C++ OutputArray::setTo使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类cv::OutputArray
的用法示例。
在下文中一共展示了OutputArray::setTo方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: normalizeDataIsotropic
void HomographyHO::normalizeDataIsotropic(cv::InputArray _Data, cv::OutputArray _DataN, cv::OutputArray _T, cv::OutputArray _Ti)
{
cv::Mat Data = _Data.getMat();
int numPoints = Data.rows * Data.cols;
assert((Data.rows == 1) | (Data.cols == 1));
assert((Data.channels() == 2) | (Data.channels() == 3));
assert(numPoints >= 4);
int dataType = _Data.type();
assert((dataType == CV_64FC2) | (dataType == CV_64FC3) | (dataType == CV_32FC2) | (dataType == CV_32FC3));
_DataN.create(2, numPoints, CV_64FC1);
_T.create(3, 3, CV_64FC1);
_Ti.create(3, 3, CV_64FC1);
cv::Mat DataN = _DataN.getMat();
cv::Mat T = _T.getMat();
cv::Mat Ti = _Ti.getMat();
_T.setTo(0);
_Ti.setTo(0);
double xm, ym;
int numChannels = Data.channels();
xm = 0;
ym = 0;
for (int i = 0; i < numPoints; i++) {
if (numChannels == 2) {
if (dataType == CV_32FC2) {
xm = xm + Data.at<Vec2f>(i)[0];
ym = ym + Data.at<Vec2f>(i)[1];
}
else {
xm = xm + Data.at<Vec2d>(i)[0];
ym = ym + Data.at<Vec2d>(i)[1];
}
}
else {
if (dataType == CV_32FC3) {
xm = xm + Data.at<Vec3f>(i)[0];
ym = ym + Data.at<Vec3f>(i)[1];
}
else {
xm = xm + Data.at<Vec3d>(i)[0];
ym = ym + Data.at<Vec3d>(i)[1];
}
}
}
xm = xm / (double)numPoints;
ym = ym / (double)numPoints;
double kappa = 0;
double xh, yh;
for (int i = 0; i < numPoints; i++) {
if (numChannels == 2) {
if (dataType == CV_32FC2) {
xh = Data.at<Vec2f>(i)[0] - xm;
yh = Data.at<Vec2f>(i)[1] - ym;
}
else {
xh = Data.at<Vec2d>(i)[0] - xm;
yh = Data.at<Vec2d>(i)[1] - ym;
}
}
else {
if (dataType == CV_32FC3) {
xh = Data.at<Vec3f>(i)[0] - xm;
yh = Data.at<Vec3f>(i)[1] - ym;
}
else {
xh = Data.at<Vec3d>(i)[0] - xm;
yh = Data.at<Vec3d>(i)[1] - ym;
}
}
DataN.at<double>(0, i) = xh;
DataN.at<double>(1, i) = yh;
kappa = kappa + xh * xh + yh * yh;
}
double beta = sqrt(2 * numPoints / kappa);
DataN = DataN * beta;
T.at<double>(0, 0) = 1.0 / beta;
T.at<double>(1, 1) = 1.0 / beta;
T.at<double>(0, 2) = xm;
T.at<double>(1, 2) = ym;
T.at<double>(2, 2) = 1;
Ti.at<double>(0, 0) = beta;
Ti.at<double>(1, 1) = beta;
Ti.at<double>(0, 2) = -beta * xm;
Ti.at<double>(1, 2) = -beta * ym;
//.........这里部分代码省略.........