简体   繁体   中英

Assertion failed error using opencv

I'm trying to run the example in the apriltags library, and I keep getting this error:

OpenCV Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == 1 && ((1 << type0) & fixedDepthMask) != 0)) in create, file /Users/Vijin/PersInq/opencv-3.2.0/modules/core/src/matrix.cpp, line 2559

I narrowed it down to a function call

detection.getRelativeTranslationRotation(m_tagSize, m_fx, m_fy, m_px, m_py,
                                         translation, rotation);

I'm not an expert in opencv, so I'd appreciate some help with this. The exception is thrown the moment a marker is detected. Otherwise, it runs fine. Here's the whole function:

void print_detection(AprilTags::TagDetection& detection) const {

cout << "  Id: " << detection.id
     << " (Hamming: " << detection.hammingDistance << ")";

// recovering the relative pose of a tag:

// NOTE: for this to be accurate, it is necessary to use the
// actual camera parameters here as well as the actual tag size
// (m_fx, m_fy, m_px, m_py, m_tagSize)

Eigen::Vector3d translation;
Eigen::Matrix3d rotation;
try{
detection.getRelativeTranslationRotation(m_tagSize, m_fx, m_fy, m_px, m_py,
                                         translation, rotation);
}
catch (const std::exception& e) 
{
  cout<<"print_detection failing";
}
Eigen::Matrix3d F;
F <<
  1, 0,  0,
  0,  -1,  0,
  0,  0,  1;
Eigen::Matrix3d fixed_rot = F*rotation;
double yaw, pitch, roll;
wRo_to_euler(fixed_rot, yaw, pitch, roll);

cout << "  distance=" << translation.norm()
     << "m, x=" << translation(0)
     << ", y=" << translation(1)
     << ", z=" << translation(2)
     << ", yaw=" << yaw
     << ", pitch=" << pitch
     << ", roll=" << roll
     << endl;

// Also note that for SLAM/multi-view application it is better to
// use reprojection error of corner points, because the noise in
// this relative pose is very non-Gaussian; see iSAM source code
// for suitable factors.

}

This issue persists with the newer versions of OpenCV. It can be easily fixed by changing line 95 of src/TagDetection.cc from cv::Matx33f cameraMatrix( to cv::Matx33d cameraMatrix( .

Note, this is simply converting from float to double . Alternatively, you can use this library ( https://github.com/PrieureDeSion/apriltags-cpp ), which I have made changes to and tested with Ubuntu 16 and OpenCV.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM