Debug C++之opencv下Mat的data赋值问题,出现段错误(核心已转储)

记录一个Mat赋值报错问题:
通常算法对软件的接口没有Mat类型,需要传unsigned char*标定Mat的data,宽度和高度三个信息:
例如,下面的接口定义了两张图像,用于相机对图像处理后的返回结果,接口信息如下:

//输入
struct OUTPUT_DATA {
	unsigned char *left_img_data;
	int left_img_width;
	int left_img_height;
	int left_img_channels;

	unsigned char *right_img_data;
	int right_img_width;
	int right_img_height;
	int right_img_channels;

};

OUTPUT_DATA 内部表示了两张图的信息,也就是两个Mat的信息,容易出错的是对unsigned char *的值赋值:
主要步骤:
(1)为结构体指针分配空间,表示一个结构体信息:

OUTPUT_DATA *out=new OUTPUT_DATA ();
out->left_img_data = new unsigned char[2048 * 2448 * 3];
out->right_img_data = new unsigned char[2048 * 2448 * 3];

(2)当Mat的信息已经包含图像的时候:
例如:

Mat img1 = imread("1.jpg");
Mat img2 = imread("2.jpg");

此时img1和img2包含了两张图的信息,传递到外部式容易出差:

错误赋值:

out->left_img_data = img1.data;
out->right_img_data = img2.data;

正确赋值

memcpy(out->left_img_data, img1.data,
           img1.cols * img1.rows * img1.channels());
//out->left_img_data = img1.data;
out->left_img_width = img1.cols;
out->left_img_height = img1.rows;
out->left_img_channels = img1.channels();
memcpy(out->right_img_data, img2.data,
           img2.cols * img2.rows * img2.channels());

//out->left_img_data = img1.data;
out->right_img_width = img2.cols;
out->right_img_height = img2.rows;
out->right_img_channels = img2.channels();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值