当前位置: 首页 > 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.lryc.cn/news/619446.html

相关文章:

  • 音视频处理新纪元:12款AI模型的语音转录和视频理解能力横评
  • 【计算机网络】王道考研笔记整理(4)网络层
  • OpenAI 回应“ChatGPT 用多了会变傻”
  • Debian新一代的APT软件源配置文件格式DEB822详解
  • 【C++详解】用红黑树封装模拟实现mymap、myset
  • 《论文阅读》从特质到移情:人格意识多模态移情反应生成 ACL 2025
  • 2025 环法战车科技对决!维乐 Angel Glide定义舒适新标
  • 用vscode开发和调试golang超简单教程
  • 【debian系统】cuda13和cudnn9.12详细安装步骤
  • Pytest项目_day15(yaml)
  • 肖臻《区块链技术与应用》第十二讲:比特币是匿名的吗?—— 深入解析匿名性、隐私风险与增强技术
  • 《算法导论》第 22 章 - 基本的图算法
  • Linux入门DAY23
  • 【从零开始java学习|第五篇】项目、模块、包、类的概念与联系
  • 解决:Gazebo连接模型数据库失败
  • 制作一款打飞机游戏90:完结
  • JavaSE高级-01
  • BGP 笔记梳理
  • 分布式事务DTP模型
  • Vue3 vs Vue2:全面对比与面试宝典
  • 递归函数与 lambda 函数:用法详解与实践
  • Pixelorama 1.1.3 像素动画编辑制作
  • 科普:Pygame 中的坐标系
  • 猫头虎AI分享:Excel MCP,让AI具备操作Excel表格|创建销售数据表、复制工作表、填充数据、写公式、绘制图表、调节颜色、添加透视表、保存为PDF
  • python与JavaScript的区别
  • Unity3d UGUI图片按钮只有非透明区域(透明阈值)可以点击功能实现(含源码)
  • 高级IO(五种IO模型介绍)
  • C# 多线程:并发编程的原理与实践
  • I2c、SPI、USB驱动架构类比
  • 2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?