opencv添加的新接口clearVec()的实现

2023-05-16

自己编译的opencv,之前文章有说添加了这个接口,也有上传3.3.0版本添加这个接口之后编译好的库,但是没有把实现过程展现出来,导致有些朋友问我如何实现的,今天把这个实现放出来,实现就是个简单的调用而已

自己添加的clearVec()接口,用于清除vector类型的列表。因为在外部调用opencv有的接口时,其传出了vector列表,传出的这个列表是在opencv中分配的内存,如果外部程序不预处理,则在其析构时会导致程序崩溃,所以这个列表也必需放在opencv中来清除。

这个接口不分opencv版本。

在头文件  modules\imgproc\include\opencv2\imgproc.hpp 中添加如下接口的声明:

/*
delete all the vector things
by Ligo, 2018.7.30
reference:
https://blog.csdn.net/liyuanbhu/article/details/50363670
https://blog.csdn.net/zhengudaoer/article/details/73796261
*/
template<typename _Tp>
CV_EXPORTS_W void clearVec(std::vector<_Tp> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<int> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point2i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point2l> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point2f> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point2d> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point2i>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point2l>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point2f>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point2d>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point3i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point3f> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Point3d> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point3i>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point3f>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Point3d>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Rect> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Rect2i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Rect2f> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Rect2d> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Rect>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Rect2i>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Rect2f>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<std::vector<Rect2d>> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Moments> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec2b> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec3b> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec4b> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec2s> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec3s> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec4s> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec2w> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec3w> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec4w> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec2i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec3i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec4i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec6i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec8i> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec2f> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec3f> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec4f> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec6f> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec2d> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec3d> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec4d> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<Vec6d> &vecs);
template CV_EXPORTS_W void clearVec(std::vector<KeyPoint> &vecs);

我添加的位置是在 getTextSize() 接口之后,LineIterator 类前面的注释之前。注意这个数据类型的列表,有可能不全,如果还有新的数据类型,应该全部加上来,当然如果有哪位朋友发现漏了哪个类型的列表,希望在下面留言,以便我也及时更新上来。

在文件 modules\imgproc\src\contours.cpp 的结尾位置添加接口的实现:

template<typename _Tp>
void cv::clearVec(std::vector<_Tp> &vecs)
{
	vecs.clear();
	vecs.resize(0);
	vecs.shrink_to_fit();
}

添加完之后重新编译编译即可.

2022.4.12:

早前添加此接口的背景,以及接口的使用测试:opencv传出vector的参数在析构时挂掉的处理_red-fly的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv添加的新接口clearVec()的实现 的相关文章

  • Python OpenCV:检测大体运动方向?

    我仍在编写一个书籍扫描脚本 现在 我所需要的只是能够自动检测翻页 这本书占据了 90 的屏幕 我使用一个粗糙的网络摄像头进行运动检测 所以当我翻页时 运动方向基本上是同一个方向 我修改了一个运动跟踪脚本 但导数却无济于事 usr bin e
  • 使用 OpenCV 进行车牌识别

    我有一个项目 需要使用 OpenCV 识别汽车的车牌 我想加载数字或字母的图像 让 OpenCV 识别它并将其打印到控制台 有一个函数可以做到这一点吗 如果没有 我该怎么办 Note 我正在研究灰度级 请帮忙 我必须在一周后完成 谢谢你的快
  • 使用 cmake 和 opencv 对符号“gzclose”的未定义引用[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我尝试构建该项目 doppia https bitbucket org rodrigob doppia 但发生链接错误 我想这是一
  • 使用畸变从图像平面计算相机矢量

    我正在尝试使用相机模型来重建可以使用某些相机及其 外部 内部 参数拍摄的图像 这一点我没有任何问题 现在我想添加扭曲 正如它们中所描述的那样OpenCV https docs opencv org 4 x dc dbb tutorial p
  • 将嘈杂的硬币重塑为圆形

    我正在使用 JavaCV OpenCV 包装器 进行硬币检测 但是当硬币连接时我遇到了一些问题 如果我尝试侵蚀它们以分离这些硬币 它们就会失去圆形形状 如果我尝试计算每个硬币内部的像素 可能会出现问题 因此某些硬币可能会被误算为更大的硬币
  • cv2.imread:检查图像是否正在被读取

    我正在用 python 编写一个 OpenCV 程序 在某些时候我有类似的东西 import cv2 import numpy as np img cv2 imread myImage jpg do stuff with image her
  • 在 iPad 上使用 OpenCV 避免碰撞

    我正在开展一个项目 需要使用 OpenCV 实现碰撞避免 这是在 iOS 上完成的 iOS 5 及以上版本即可 项目目标 这个想法是将 iPad 安装在汽车仪表板上并启动应用程序 应用程序应该从相机中抓取帧并进行处理 以检测汽车是否会与任何
  • 在opencv中保存帧而不压缩

    我正在尝试使用写 OpenCV 函数 我想保存帧 TIFF扩大 我遇到的问题是保存的图像被压缩 所以我无法使用它们 知道如何摆脱这种压缩吗 提前致谢 不要介意西奇说的话 TIFF 标志通过 LZW 压缩硬编码在 opencv 二进制文件中
  • 带有 OpenCV 的增强现实 SDK [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 编译使用Basler相机的程序

    我正在尝试使用 Basler 相机捕获图像的 C 程序来工作 我拿到 来自制造商的代码 它应该 非常容易使用 但是 链接它有 成为一场噩梦 我的 C 时代已经过去了 最近只使用 Matlab 所以我可能会犯一些愚蠢的错误 但请赐教 代码如下
  • 如何使用requirements.txt 在 Heroku python Web 应用程序中安装 Dlib?

    我构建了一个涉及机器学习的 Python Flask Web API 但在 Heroku 上部署它时遇到了很多挫折 问题是 我的应用程序依赖于 Dlib 一个库 我似乎找不到在我的 Heroku 服务器中安装的方法 我正在试图解决这个问题
  • 使用相位相关和对数极坐标变换获得旋转位移

    我一直在编写一个脚本 它使用 cv2 计算两个图像之间的旋转位移phaseCorrelate method 我有两张图像 第二张是第一张图像的 90 度旋转版本 加载图像后 我将它们转换为对数极坐标 然后将它们传递到phaseCorrela
  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • 如何在Python中使用tcp套接字发送和接收网络摄像头流?

    我正在尝试重新创建这个项目 https github com hamuchiwa AutoRCCar 我拥有的是服务器 我的电脑 和客户端 我的树莓派 我所做的与原始项目不同的是我尝试使用一个简单的网络摄像头而不是树莓派摄像头将图像从我的
  • 计算两个描述符之间的距离

    我正在尝试计算已计算的两个描述符之间的距离 欧几里得或汉明 问题是我不想使用匹配器 我只想计算两个描述符之间的距离 我正在使用 OpenCV 2 4 9 并且我的描述符存储在 Mat 类型中 Mat descriptors1 Mat des
  • Opencv matchTemplate 和 np.where():仅保留唯一值

    继带有马里奥硬币的 opencv 教程 https opencv python tutroals readthedocs io en latest py tutorials py imgproc py template matching p
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • 多视图几何

    我从相距一定距离的两台相同品牌的相机捕获了两张图像 捕获了相同的场景 我想计算两个相机之间的现实世界旋转和平移 为了实现这一点 我首先提取了两张图像的 SIFT 特征并进行匹配 我现在有基本矩阵也单应性矩阵 然而无法进一步进行 有很多混乱
  • 无法在 Windows 7 机器中使用 OpenCV 2.4.3、Python 2.7 打开“.mp4”视频文件

    我目前正在进行一个涉及读取 mp4 视频文件的项目 我遇到的问题是它在Windows 7机器上使用Python 2 7 32位 OpenCV 2 4 3 cv2 pyd 代码片段如下 try video cv2 VideoCapture v

随机推荐

  • 【网段】【vlan】【广播域】关于网段,vlan和广播域的关系的个人理解

    广播域是一个二层概念 xff0c 所有能够接收到同一个广播的设备处于同一广播域 而所有的三层以下的设备 xff08 不包括第三层 xff09 都是不能隔离广播的 xff0c 所以所有由交换机 xff0c 网桥 xff0c 集线器连接起来的设
  • git 创建远程库

    首先是git的配置 git config global user name 34 your name 34 git config global user email 34 your mail 34 这两个配置信息是用来记录你的git操作 x
  • python 创建二维列表的方法

    使用python创建二维列表有以下两种方式 xff1a 1 列表复制法 xff1a a 61 0 width height 但是这种方法会导致如下问题 xff1a gt gt gt a 61 0 3 4 gt gt gt a 0 0 0 0
  • 各种接插头名称汇总

    杜邦线插头 JST接线端子 SH1 0MX1 25ZH1 5PH2 0HY2 0XH2 54贴片座子 T型插头 XT60型插头 SM插头 未完待续
  • GA-B85M-D3V PLUS 1150安装win10后的蓝屏问题汇总

    通过windbg来定位出错的sys文件 下面是安装技嘉官方驱动后依然频繁出现的蓝屏 尝试方案fltmgr sys sfc scannow chkdsk c f r dxgmms2 syssystem service exception dx
  • 超声波风速风向传感器

    OSA 1F1 超声波风速风向传感器 1 概述 OSA 1F1超声波风速风向传感器是一款迷你型全数字化传感器 xff0c 高度集成超声波风速 风向传感器 xff0c 体积小巧 xff0c 集成度高 xff0c 质量轻 xff0c 坚固耐用
  • Loggernet软件新手入门(一)

    loggernet软件新手入门 xff08 一 xff09 安装与简单操作 一 xff0e 软件及驱动安装安装 1 1 打开软件安装包 xff0c 点击 exe应用程序图标 xff0c 然后在弹出的对话框中 xff0c 选择 Install
  • Loggernet软件新手入门(二)

    一 xff0e 创建一个程序 在loggernet软件中 xff0c 创建一个程序有两种方式 xff1a Short Cut以及CRBasic Editor xff0c 这两种方式都可以在Program目录下找到 1 1Short Cut
  • PC200W-简版loggernet软件

    一 xff0e 解压缩PC200W文件夹 xff0c 双击下图图标 xff0c 可以打开PC200W 二 xff0e 创建一个连接 打开软件后 xff0c 会弹出一个关于创建连接的对话框 xff0c 如果没有弹出 xff0c 可以在Netw
  • 示例一:CR300接CS655

    Public PTemp Batt volt Public CS655 3 Alias CS655 1 61 vwc Alias CS655 2 61 ec Alias CS655 3 61 T Units vwc 61 Units ec
  • 日本原装COM 3600F专业型空气负离子检测仪 --CR1000采集

    Public PTemp Batt volt Public instring string As String 36 Public Num spilt 3 As String 3 Alias Num spilt 1 61 ION FM Pu
  • java FlowLayout示例

    java FlowLayout示例 xff1a import java awt FlowLayout import javax swing JLabel import javax swing WindowConstants import j
  • Get 一个显示界面,与数采串口通信

    程序第一步 xff1a 显示 数据来源 xff0c CR1000数据采集器 xff0c 5秒采集并存储上传 第二步 xff1a 存储 TXT文档存储 xff0c 逗号分隔 xff0c 每月创建一个新的文件 xff0c 可以另存为excel文
  • UART通信协议

    UART通信协议 一 UART是什么 xff1f 1 同步串口通信 vs 异步串口通信2 串行通信 二 通信协议三 工作原理四 特点 一 UART是什么 xff1f 通用异步收发传输器 xff08 Universal Asynchronou
  • win10右下角的通知区域

    属性 gt 通知和操作 gt 选择在任务栏上显示哪些图标 gt
  • UART一对多通信的方法

    通常 xff0c uart为单对单通信 xff0c 当用到一对多时可以用RS485 然而有时候我们MCU的uart口只剩一个 xff0c 又要接多个uart的外围芯片 xff0c 这时如果转成RS485需要加多个485收发器 xff0c 成
  • 全网最全的 postman 工具使用教程

    正文如下 xff0c 如果觉得有用欢迎点赞 关注 postman是一款支持http协议的接口调试与测试工具 xff0c 其主要特点就是功能强大 xff0c 使用简单且易用性好 无论是开发人员进行接口调试 xff0c 还是测试人员做接口测试
  • 星际争霸1终于可以在win10上运行了

    win7的时候 xff0c 星际争霸1就不能运行 xff0c 只好装了个虚拟机 xff0c 在虚拟机里玩 刚刚更新到了win10 xff0c 总觉得在虚拟机里玩不是个事 xff0c 就去网上搜索 xff0c 终于发现了办法 在 StarCr
  • windows下编译opencv 3.4.0

    为了方便后期的调试 xff0c 自己动手编译opencv3 4 0 xff0c 这样有需要的时候还可以自己修改修改源代码 通常来说 xff0c 编译32位比较简单 xff0c 直接用cmake生成编译的工程就行了 xff0c 但64位就比较
  • opencv添加的新接口clearVec()的实现

    自己编译的opencv xff0c 之前文章有说添加了这个接口 xff0c 也有上传3 3 0版本添加这个接口之后编译好的库 xff0c 但是没有把实现过程展现出来 xff0c 导致有些朋友问我如何实现的 xff0c 今天把这个实现放出来