OpenCV/WishList/ConvertPointsHomogeneous

From ProgrammingExamples
Jump to: navigation, search
OpenCV Error: Assertion failed (_dst.fixedType()) in convertPointsHomogeneous

ConvertPointsHomogeneous.cxx

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
 
#include <iostream>
#include <string>
 
void UseDoubles();
void UseFloats();
 
int main( int argc, char* argv[])
{
  //UseDoubles();
  UseFloats();
  return 0;
}
 
void UseDoubles()
{
  // Create the known projection matrix
  cv::Mat Thomogeneous(4,1,cv::DataType<double>::type);
  Thomogeneous.at<double>(0,0) = -2.8058e-01;
  Thomogeneous.at<double>(1,0) = -6.8326e-02;
  Thomogeneous.at<double>(2,0) = 5.1458e-07;
  Thomogeneous.at<double>(3,0) = 5.1458e-07;
 
  std::cout << "Thomogeneous: " << Thomogeneous << std::endl;
 
  //cv::Mat T(3,1,cv::DataType<double>::type); // translation vector
  cv::Mat T;
  //cv::convertPointsHomogeneous(Thomogeneous, T);
  cv::convertPointsFromHomogeneous(Thomogeneous, T);
 
  std::cout << "T: " << T << std::endl;
}
 
void UseFloats()
{
  // Create the known projection matrix
  cv::Mat Thomogeneous(1,4,cv::DataType<float>::type);// This returns 1?
  //cv::Mat Thomogeneous(4,1,cv::DataType<float>::type);// This returns -1?
  //cv::Mat Thomogeneous(4,1,CV_32FC1);// This returns -1?
  //cv::Mat Thomogeneous(1,4,CV_32FC1); // This returns 1?
 
  std::cout << "Thomogeneous.depth() = " << Thomogeneous.depth() << std::endl;
  std::cout << "Thomogeneous.checkVector(3) = " << Thomogeneous.checkVector(3) << std::endl;
  std::cout << "Thomogeneous.checkVector(4) = " << Thomogeneous.checkVector(4) << std::endl;
 
  std::cout << "Before setting values" << std::endl;
  std::cout << "Thomogeneous.channels() = " << Thomogeneous.channels() << std::endl;
  std::cout << "Thomogeneous.rows() = " << Thomogeneous.rows << std::endl;
  std::cout << "Thomogeneous.cols() = " << Thomogeneous.cols << std::endl;
  /*
  Thomogeneous.at<float>(0,0) = -2.8058e-01;
  Thomogeneous.at<float>(1,0) = -6.8326e-02;
  Thomogeneous.at<float>(2,0) = 5.1458e-07;
  Thomogeneous.at<float>(3,0) = 5.1458e-07;
  */
 
  Thomogeneous.at<float>(0,0) = -2.8058e-01;
  Thomogeneous.at<float>(0,1) = -6.8326e-02;
  Thomogeneous.at<float>(0,2) = 5.1458e-07;
  Thomogeneous.at<float>(0,3) = 5.1458e-07;
 
  std::cout << "After setting values" << std::endl;
  std::cout << "Thomogeneous.channels() = " << Thomogeneous.channels() << std::endl;
  std::cout << "Thomogeneous.rows() = " << Thomogeneous.rows << std::endl;
  std::cout << "Thomogeneous.cols() = " << Thomogeneous.cols << std::endl;
 
  std::cout << "Thomogeneous: " << Thomogeneous << std::endl;
 
  //cv::Mat T(3,1,cv::DataType<double>::type); // translation vector
  cv::Mat T;
  //cv::convertPointsHomogeneous(Thomogeneous, T);
  cv::convertPointsFromHomogeneous(Thomogeneous, T);
 
  std::cout << "T: " << T << std::endl;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
 
PROJECT(ConvertPointsHomogeneous)
 
FIND_PACKAGE(OpenCV REQUIRED )
INCLUDE_DIRECTORIES( ${OPENCV_INCLUDE_DIR} )
 
ADD_EXECUTABLE(ConvertPointsHomogeneous ConvertPointsHomogeneous.cxx)
TARGET_LINK_LIBRARIES(ConvertPointsHomogeneous opencv_core opencv_highgui
opencv_flann opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_objdetect
          opencv_features2d opencv_calib3d opencv_legacy opencv_contrib
)