0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV4源码分析

汽车电子技术 来源:云深之无迹 2023-02-22 10:00 次阅读

之前文章写完有个Flag,要写OpenCV的解读,后面写了展会,看书等无关紧要的文章,现在距离12点还有21分钟,我就简短的写一点分析。

首先,源码我是从Github上面直接拉的最新的代码,删除一些无关紧要的文件,就变成了下面这样。

图片

其实在4的时代,只要导入这个头文件就行,因为这个文件就是把所有的实现做了一个汇总。

图片

里面集成了所有要使用的头文件

图片

里面有着条件宏来控制功能的开关与否

图片

每次处理都需要的图片读取函数,在这里被定义

图片

整个文件里面有的函数和信息空间

图片

这个函数就是判断是不是一个图像文件

图片

我们注意到前面有个宏

图片

这个是官方文档给的函数的说明,看源码之前一定要很熟悉官方的文档才行

图片

支持读取的文件

图片

所以这个宏是什么意思呢?

这里也插一句,我以前看腾讯的TinyOS就看到了很多这样的函数定义,我就很疑惑,这个到底是怎么个用法?我为什么学的里面就有。

其实我理解的应该是,这个宏首先不影响函数的功能,就是有或没有都没有关系,那作用是啥?

是说明!说明这个函数的一些属性,比如它是不是一个系统的API,或者是需要你调用的时候自己实现的。我是这样的理解,如果不对也请联系我,让我搞明白这个事情。

这里解释一下C++里面的这个前置宏(前缀?)的大致用法。

CV_EXPORTS_W在

modules/core/include/opencv2/core/types_c.h

中定义为 的别名

CV_EXPORTS

,并且在同一文件

CV_EXPORTS

中定义为:

#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS
# define CV_EXPORTS __declspec(dllexport)
#else
# define CV_EXPORTS
#endif

换句话说,它是定义:

__declspec(dllexport)

在windows平台上的别名CVAPI_EXPORTS,否则为空。

上面代码里面的_delcspce(dllexport)被定义为宏,这样可以提高程序的可读性!这个的作是是将函数定义为导出函数,也就是说这个函数要被包含这个函数的程序之外的程序调用!

CV_WARP 用作脚本的标志以创建函数或方法的包装器。它用于创建 PythonJava 包装器。

应该是多平台之间不同的编译器有不同的编译选项,只是为了以后其它平台有需要添加的或扩展的编译时选项而预留的。例如在VC环境下进行回调函数的声明时,很多时候都会加上**_stdcall、_cdecl、 _fastcall**这三个在windows平台下指定函数调用的方式的编译选项。所以,这种定义为空的宏的作用是预留下以后平台移植时的其它选项的定义。应该仅仅是为了移植的方便。有时候也有可能是为了对函数进行标识,说明。

提高代码的可移植性和平台/编译器无关性

宏定义必须写在函数之外,其作用域是 #define 开始,到源程序结束。如果要提前结束它的作用域则用 #undef 命令

图片

这样的代码几乎在每个开源库中都可能见到,主要的目的就是 C 和 C++ 混合编程,具体来说就是:

如果使用 gcc 来编译,那么宏 __cplusplus 将不存在,其中的 extern "C" 将会被忽略;

如果使用 g++ 来编译,那么宏 __cplusplus 就存在,其中的 extern "C" 就发生作用,编译出来的函数名 hello 就不会被 g++ 编译器改写,因此就可以被 C 代码来调用。

通过函数来实现:

形参的类型需要确定,调用时对参数进行检查;

调用函数时需要额外的开销:操作函数栈中的形参、返回值等;

通过宏来实现:

不需要检查参数,更灵活的传参;

直接对宏进行代码扩展,执行时不需要函数调用;

如果同一个宏在多处调用,会增加代码体积;

时间太短只能写这么多了~

图片

晚安~

https://www.51cto.com/article/645044.html
https://zhuanlan.zhihu.com/p/447763456
https://pangda.blog.csdn.net/article/details/125497601
https://answers.opencv.org/question/6528/cv_wrap-and-cv_exports_w/
https://blog.csdn.net/lh1573378488/article/details/50519577
https://stackoverflow.com/questions/12083583/what-cv-exports-w-means
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3881

    浏览量

    61310
  • 源程序
    +关注

    关注

    63

    文章

    1693

    浏览量

    45166
  • 作用域
    +关注

    关注

    0

    文章

    6

    浏览量

    6084
收藏 人收藏

    评论

    相关推荐

    OpenCV4.8 CUDA编程代码教程

    OpenCV4支持通过GPU实现CUDA加速执行,实现对OpenCV图像处理程序的加速运行,当前支持加速的模块包括如下。
    的头像 发表于 12-05 09:56 452次阅读
    <b class='flag-5'>OpenCV</b>4.8 CUDA编程代码教程

    鲁班猫0 -安装opencv

    ON OPENCV_GENERATE_PKGCONFIG 因为opencv4默认不生成.pc文件,所以加上这句用于生成opencv4.pc文件,支持pkg-config功能。opencv4
    发表于 04-09 13:29

    CMake在Linux 6.1.1-1.0.0中搜索包opencv损坏了吗?

    imx-image-multimedia 的 SDK,我收到以下错误: sysroots/armv8a-poky-linux/usr/lib/cmake/opencv4/OpenCVModules.cmake
    发表于 05-09 11:32

    OpenCV3编程入门-源码例程全集-OpenCV开发环境的配置

    OpenCV3编程入门-源码例程全集-OpenCV开发环境的配置,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:27 20次下载

    OpenCV3编程入门-源码例程全集-多通道图像混合

    OpenCV3编程入门-源码例程全集-多通道图像混合
    发表于 09-18 16:38 0次下载

    OpenCV3编程入门-源码例程全集-初级图像混合

    OpenCV3编程入门-源码例程全集-初级图像混合
    发表于 09-18 16:38 6次下载

    OpenCV3编程入门-源码例程全集-彩色目标跟踪

    OpenCV3编程入门-源码例程全集-彩色目标跟踪
    发表于 09-17 22:54 2次下载

    OpenCV3编程入门-源码例程全集-播放视频

    OpenCV3编程入门-源码例程全集-播放视频
    发表于 09-17 22:54 18次下载

    OpenCV3编程入门-源码例程全集-人脸识别

    OpenCV3编程入门-源码例程全集-人脸识别
    发表于 09-17 22:55 1次下载

    OpenCV3编程入门-源码例程全集-模板匹配

    OpenCV3编程入门-源码例程全集-模板匹配
    发表于 09-17 22:55 4次下载

    OpenCV进行基本绘图_OpenCV3编程入门-源码例程

    OpenCV3编程入门-源码例程全集-用OpenCV进行基本绘图,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 17:02 3次下载

    基于opencv4和Yolo-Fastest,实现PC和单片机通信,控制步进电机捕获目标

    效果视频 基于opencv4和yolo,实现PC和单片机通信,控制步进电机捕获目标
    发表于 11-23 17:36 15次下载
    基于<b class='flag-5'>opencv4</b>和Yolo-Fastest,实现PC和单片机通信,控制步进电机捕获目标

    如何在Raspberry Pi 3上安装OpenCV4

    今天我们将学习如何在 Raspberry Pi 3 上安装 OpenCV4 库,以便我们可以将其用于计算机视觉应用程序。这将允许 OpenCV 在像 Pi 这样的便携式设备上运行,从而打开许多可能性的大门。所以让我们开始吧
    的头像 发表于 09-08 16:09 1369次阅读
    如何在Raspberry Pi 3上安装<b class='flag-5'>OpenCV4</b>库

    qt opencv opencl opengl源码例程

    qt-opencv-opencl-opengl-源码例程
    发表于 09-27 14:42 1次下载

    学习OpenCV4的系统化路线图

    OpenCV4发布测试版本开始,作者就一直关注!根据自己近十年图像处理OpenCV开发相关工作经验,花了七个月的时间,针对OpenCV4、精心选择OpenCV中常用模块与知识点,构建
    的头像 发表于 07-05 11:30 369次阅读
    学习<b class='flag-5'>OpenCV4</b>的系统化路线图