opencv的cv::Mat 连续性问题

近期在项目中调试过程中发现个很疑惑的问题:

由于应用程序是C语言,调用的接口是经过封装的C++接口,接口1是输入图片和ROI参数后返回ROI区域数据的首地址。接口2是将返回截取后的图片数据的首地址输入进行算法识别。

如下图两个接口

        接口cv_roi_image_get 在用opencv的imread接口将图片读取后,对原图经过ROI截取后将截取后的数据保存到自己分配的内存中后,再将该内存返回。

       接口cv_image_save 在用opencv的imwrite接口pdata的存储数据保存为图片。

在经过以上操作后,将图片截取后输入到算法一直无法识别,经过调试发现,在roi之后数据还是正常,一旦自己分配内存拷贝后保存的图片就出现异常,测试接口如下。

而后查看cv::Mat 类型的特性发现,cv::Mat有可能因字节对齐的原因导致数据存储不连续,而ROI操作就是原因之一,因此需要额外做出判断和处理,参考以下链接。

【OpenCV4】cv::Mat.isContinuous() 函数判断内存是否连续(c++)-CSDN博客

解决方法:在ROI后,拷贝内存前,判断是否连续,若是则直接拷贝,若不是,则进行cv::Mat复制处理,自动转化为连续

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值