こばや小林 2024-02-15 11:22 采纳率: 85.2%
浏览 3
已结题

Mat类型copy与clone运行错误

OpenCV4
我在函数中新建Mat copy,img.
实现copy=img.clone()或者img.copyTo(copy)时均报错
读取访问权限冲突
(this指向0xF..)。请问如何解决

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-15 11:23
    关注

    引自免费微信小程序:皆我百晓生

    在OpenCV中,当你尝试执行copy=img.clone()img.copyTo(copy)时遇到“读取访问权限冲突”错误,这通常意味着你正在尝试拷贝一个已经释放或者未正确初始化的cv::Mat对象。确保以下几点:

    1. 确保img对象有效: 确保img是在其生命周期内进行操作的,并且已经被正确初始化,比如从文件、摄像头或其他源加载图像。

    2. 避免悬垂引用: 在调用clone或copyTo之前,检查img是否在其他地方已被释放(例如通过赋值操作符覆盖或调用了release方法)。

    3. 初始化目标矩阵: 在执行拷贝操作前,请确保copy已正确初始化为与img兼容的尺寸和类型。

    下面是一个示例代码片段,展示如何安全地进行拷贝操作:

    #include <opencv2/opencv.hpp>
    
    void yourFunction() {
        cv::Mat img = cv::imread("your_image.jpg"); // 假设成功读取了图片
        if (img.empty()) {
            std::cerr << "Error: Could not load image" << std::endl;
            return;
        }
    
        cv::Mat copy; // 正确初始化目标矩阵
        copy.create(img.size(), img.type()); // 与原图尺寸和类型一致
    
        // 使用clone方法复制图像数据
        copy = img.clone();
    
        // 或者使用copyTo方法
        img.copyTo(copy);
    }
    

    如果以上检查都已完成,问题仍然存在,请检查是否存在多线程环境下的并发访问问题,以及其他可能导致内存异常的因素。同时,务必查看错误堆栈信息以获取更精确的问题定位。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月23日
  • 已采纳回答 2月15日
  • 创建了问题 2月15日

悬赏问题

  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度
  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数
  • ¥15 labelme生成的json有乱码?