如何将 sensor_msgs/CameraInfo 分配给 cv::Mat
How to assign the sensor_msgs/CameraInfo to cv::Mat
我想知道分配 const sensor_msgs::CameraInfoConstPtr& camInfo_msg, to cv::Mat 最聪明的方法是什么。
假设我希望使用参数 Intrinsic camera matrix float64[9] K into cv::Mat intrK.
我写了下面的代码,它工作正常,但我不知道这是否是最好的方法。我想知道其他人是如何解决这个问题的。
void Class::Callback(const sensor_msgs::CameraInfoConstPtr& camInfo_msg){
// receive the parameters
sensor_msgs::CameraInfoPtr cameraInfoMsg = boost::make_shared<sensor_msgs::CameraInfo>(*camInfo_msg);
// copy parameters
cv::Mat intrK = cv::Mat::zeros(3, 3, CV_64FC1);
std::vector<double> v_intrK;
// initialize cv::Mat of correct size and vector
v_intrK.assign((cameraInfoLMsg->K).begin(), (cameraInfoLMsg->K).end());
// assign parameters to vector
for (std::size_t i = 0; i < intrK.rows; i++)
for (std::size_t j = 0; j < intrK.cols; j++)
intrK.at<double>(i, j) = v_intrK[i*3+j];
// assign vector to cv::Mat
我问这个问题是因为当我分配来自 const sensor_msgs::ImageConstPtr& img_msg to cv::Mat I use the cv_bridge 的图像时,有一种聪明的方法可以做到这一点。那么也许在相机信息中也存在我从未见过的东西。
谢谢你的时间。
我发现的最简单和最紧凑的方法是创建一个 cv::Mat
指向与 sensor_msgs::CameraInfo::K
相同的数据。您可以使用以下代码实现此目的:
void Class::Callback(const sensor_msgs::CameraInfoConstPtr& camInfo_msg) {
cv::Mat intrK(3, 3, CV_64FC1, (void *) camInfo_msg->K.data());
}
我想知道分配 const sensor_msgs::CameraInfoConstPtr& camInfo_msg, to cv::Mat 最聪明的方法是什么。
假设我希望使用参数 Intrinsic camera matrix float64[9] K into cv::Mat intrK.
我写了下面的代码,它工作正常,但我不知道这是否是最好的方法。我想知道其他人是如何解决这个问题的。
void Class::Callback(const sensor_msgs::CameraInfoConstPtr& camInfo_msg){
// receive the parameters
sensor_msgs::CameraInfoPtr cameraInfoMsg = boost::make_shared<sensor_msgs::CameraInfo>(*camInfo_msg);
// copy parameters
cv::Mat intrK = cv::Mat::zeros(3, 3, CV_64FC1);
std::vector<double> v_intrK;
// initialize cv::Mat of correct size and vector
v_intrK.assign((cameraInfoLMsg->K).begin(), (cameraInfoLMsg->K).end());
// assign parameters to vector
for (std::size_t i = 0; i < intrK.rows; i++)
for (std::size_t j = 0; j < intrK.cols; j++)
intrK.at<double>(i, j) = v_intrK[i*3+j];
// assign vector to cv::Mat
我问这个问题是因为当我分配来自 const sensor_msgs::ImageConstPtr& img_msg to cv::Mat I use the cv_bridge 的图像时,有一种聪明的方法可以做到这一点。那么也许在相机信息中也存在我从未见过的东西。 谢谢你的时间。
我发现的最简单和最紧凑的方法是创建一个 cv::Mat
指向与 sensor_msgs::CameraInfo::K
相同的数据。您可以使用以下代码实现此目的:
void Class::Callback(const sensor_msgs::CameraInfoConstPtr& camInfo_msg) {
cv::Mat intrK(3, 3, CV_64FC1, (void *) camInfo_msg->K.data());
}