Ошибка смешивания двух изображений в OpenCV

Я хочу смешать два изображения RGB и глубину, чтобы искать сдвиг между.
Это моя программа, я делаю ее очень простой для понимания, просто используя основы программирования на русском языке.

    #include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>

using namespace cv;

cv_bridge::CvImagePtr cv_ptr_rgb;

void imageCallbackrgb(const sensor_msgs::ImageConstPtr& msg)
{

//cv_bridge::CvImagePtr cv_ptr_rgb;

try
{
cv_ptr_rgb = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::MONO8);
}

catch (cv_bridge::Exception& e)
{
ROS_ERROR("cv_bridge exception: %s", e.what());
return;
}//cv::imshow("OpenCV viewer Kinect RGB", cv_ptr_rgb->image);

cvWaitKey(3);

}void imageCallbackdepth(const sensor_msgs::ImageConstPtr& msg)
{
// convert message from ROS to openCV
cv_bridge::CvImagePtr cv_ptr_depth;

try
{
cv_ptr_depth = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::TYPE_16UC1);

}

catch (cv_bridge::Exception& e)
{
ROS_ERROR("cv_bridge exception: %s", e.what());
return;
}//conversion 16UC to 8UC
/*
Conversion Sutffs
*/
/*
//*******************************blending two images*************************************
double alpha = 0.5; double beta;
beta = ( 1.0 - alpha );
Mat dst;
addWeighted( cv_ptr_rgb->image, alpha, image_8CU, 0.5, 0.5, dst);
cv::imshow( "Linear Blend", dst );
//**************************************************************************************
*/

cv::imshow("OpenCV viewer Kinect RGB", cv_ptr_rgb->image);
//cv::imshow("OpenCV viewer Kinect depth", image8U);
cvWaitKey(3);

}

int main(int argc, char **argv)

{
ros::init(argc, argv, "listenerKinectuEye");
ros::NodeHandle nh;

image_transport::ImageTransport it(nh);

image_transport::Subscriber subkirgb = it.subscribe("/camera/rgb/image_color", 1, imageCallbackrgb);
image_transport::Subscriber subkidepth = it.subscribe("/camera/depth_registered/image_raw", 1, imageCallbackdepth);

ROS_INFO("subscribed to Kinect and uEye topics");

ros::spin();
}

И это ошибка, которую я получаю (sub_node — мой исполняемый файл):

sub_node: /usr/include/boost/smart_ptr/shared_ptr.hpp:418:
T* boost::shared_ptr<T>::operator->() const [with T = cv_bridge::CvImage]: Assertion `px != 0' failed.
Aborted (core dumped)

ошибка исходит от указателя cv_ptr_rgb, который я использую в imageCallbackdepth, потому что даже когда я пытаюсь

cv::imshow("OpenCV viewer Kinect RGB", cv_ptr_rgb->image);

перед смешиванием я получаю ту же ошибку.

Как это решить?

1

Решение

Задача ещё не решена.

Другие решения