当前位置: 首页 > news >正文

OpenCV常见问题汇总

1、深度拷贝的问题

我对整张图像通过裁剪分别进行识别,出现识别结果与期望不同的问题,经过大量排查是OpenCV深度拷贝问题,我原来有问题的写法

cv::Mat matCrop = matZoom(roi);
cv::Mat matCrop1= matCrop(roi1);
cv::Mat matCrop2= matCrop(roi2);
InferOnnx(matCropR1);
InferOnnx(matCropR2);

经过深度拷贝没有问题的写法

cv::Mat matCrop = matZoom(roi);
cv::Mat matCrop1= matCrop(roi1);
cv::Mat matCrop2= matCrop(roi2);
cv::Mat matCropClone1=matCrop1.clone();
cv::Mat matCropClone2=matCrop2.clone();
InferOnnx1(matCropClone1);
InferOnnx1(matCropClone2);

问题分析:

在需要独立操作数据时,务必使用深拷贝(`clone()`或`copyTo()`),以避免意外的修改。- 浅拷贝效率高,因为不复制数据,但需要注意共享数据带来的副作用。- `copyTo()`方法还可以配合掩码使用,例如:`A.copyTo(B, mask);` 其中`mask`是一个二值图像,指定要复制的区域。

在 OpenCV 的 C++ 接口中,cv::Mat 是核心数据结构,用于存储图像和矩阵数据。复制 Mat 对象时需注意浅拷贝(共享数据)和深拷贝(独立数据)的区别。

浅拷贝 (Shallow Copy)

仅复制矩阵头(尺寸、类型等元数据),共享底层数据,修改副本会影响原矩阵

cv::Mat src = imread("image.jpg"); // 原始矩阵
cv::Mat shallowCopy1 = src;       // 赋值操作(浅拷贝)
cv::Mat shallowCopy2(src);        // 构造函数(浅拷贝)

深拷贝 (Deep Copy)

复制矩阵头 并创建独立的数据副本,修改副本不影响原矩阵

cv::Mat deepCopy1 = src.clone();  // 推荐方式
或者
cv::Mat deepCopy2;
src.copyTo(deepCopy2);            // 复制到目标矩阵

http://www.xdnf.cn/news/1293949.html

相关文章:

  • Java JDK8环境配置
  • 基于Java的Markdown转Word工具(标题、段落、表格、Echarts图等)
  • 药房智能盘库系统:基于CV与时间序列预测的库存革命
  • 《算法导论》第 22 章 - 基本的图算法
  • Kubernetes-03:Service
  • Notepad++插件开发实战
  • Mac安装ant
  • [系统架构设计师]系统架构基础知识(一)
  • Flutter权限管理三步曲:检查、申请、处理全攻略
  • 三、非线性规划
  • 第十二节:粒子系统:海量点渲染
  • nm命令和nm -D命令参数
  • Docker部署 Neo4j 及集成 APOC 插件:安装与配置完整指南(docker-compose)
  • python的游戏评级论坛系统
  • [AI React Web] 包与依赖管理 | `axios`库 | `framer-motion`库
  • 《探索C++ set与multiset容器:深入有序唯一性集合的实现与应用》
  • 实盘回测一体的期货策略开发:tqsdk获取历史数据并回测,附python代码
  • Java 基础概念笔记
  • davici configurator 报错:License file of SIP has no valid checksum.
  • GitHub宕机时的协作方案
  • 如何使用 Ollama 在本地设置并运行 Qwen3
  • Git核心机制:工作区、暂存区与版本库
  • PyTorch Tensor完全指南:深度学习数据操作的核心艺术
  • Windows基础概略——第一阶段
  • 锂电池自动化生产线:智能制造重塑能源产业格局
  • 全球AI安全防护迈入新阶段:F5推出全新AI驱动型应用AI安全解决方案
  • C语言——深入理解指针(三)
  • YOLOv11+TensorRT部署实战:从训练到超高速推理的全流程
  • TeamViewer 以数字化之力,赋能零售企业效率与客户体验双提升
  • ROS2实用工具