没有合适的资源?快使用搜索试试~ 我知道了~
首页OpenCV入门教程:C++常见问题与解决方案
OpenCV入门教程:C++常见问题与解决方案
需积分: 10 0 下载量 80 浏览量
更新于2024-07-16
收藏 1.71MB PDF 举报
"OpenCVII.pdf"是一份针对C++/C语言初学者的OpenCV入门教程,由作者于仕琪编写,适用于希望快速掌握OpenCV的使用者。该文档旨在帮助读者克服编程基础和算法理解方面的挑战,强调了实践的重要性。教程首先介绍了计算机视觉的基础知识,包括编程流程、编辑、编译、连接和运行的概念,以及Visual C++的简介。 作者解释了OpenCV作为一个开源库的作用,它提供丰富的计算机视觉算法实现,从基本滤波到高级物体检测,适合于不具备深入算法原理的用户。虽然理论知识如《数字图像处理》、《计算机视觉》和《模式识别》对于深入理解很重要,但初学者可以通过实践OpenCV来学习,不必一开始就追求完全理解所有细节。 文档详细讲解了OpenCV的安装与使用,如头文件和库文件的作用,以及如何正确设置命令行参数。对于常见编译和链接错误,作者给出了具体的解决方案,例如解决找不到头文件、拼写错误和链接失败等问题。此外,还提到了运行时错误的处理,这些都是学习过程中可能会遇到的问题。 第2章介绍了OpenCV的起源和使用的协议,有助于读者了解库的历史背景及其开源许可方式。第3章则重点转向实际操作,阐述了图像的基本表示方法和Mat类的使用,这是OpenCV的核心数据结构,用于处理图像和矩阵操作。 "OpenCVII.pdf"是一份实用的教程,不仅涵盖了OpenCV的基础知识,还包括了如何有效地解决在学习过程中遇到的常见问题,是初学者理解和使用OpenCV的重要参考资料。作者鼓励读者在实践中学习,同时也提供了进一步深造的机会,如通过报考作者在深圳大学的研究生项目。
资源详情
资源推荐
9
图 1.9 微软 Visual Stdio 集成开发环境
图 1.10 Visual Stdio 中的编辑按钮
图 1.11 Visual Stdio 中的生成程序按钮
1.7 头文件
在编程过程中,程序代码往往被拆成很多部分,每部分放在一个独立的源文
件中,而不是将所有的代码放在一个源文件中。考虑一个简单的小例子:程序中
有两个函数 main()和 foo()。main()函数位于 main.cpp,foo()函数位于 foo.cpp,
main()函数中调用 foo()函数。在编译阶段,由于编译是对单个文件进行编译,所
以编译 main.cpp 时,编译器不知道是否存在 foo()函数以及 foo()调用是否正确,
因此需要头文件辅助。也就是说,在编译命令:
cl.exe /c main.cpp
运行时,编译器不知道 foo 的用法是否正确(因为 foo 在另一个文件 foo.cpp
中),只有借助头文件中的函数声明来判断。对 main.cpp 进行编译时,不会涉及
foo.cpp 文件,只会涉及 main.cpp 和 foo.h(因为 foo.h 被 include)文件。头文件
的作用如图 1.1 所示。
10
图 1.12 对 main.cpp 进行编译时,需要利用头文件中的 foo()函数声明来确认 main.cpp 中
对 foo()的调用是正确的
1.8 库文件
库文件中包含一系列的子程序。例如在上一节的例子中,foo.cpp 源文件中
实现了 foo()函数,我们假设 foo()函数是包含重要算法的函数,我们需要将 foo()
函数提供给客户使用,但是不希望客户看到算法源代码。为了达到这一目的,我
们可以将 foo.cpp 编译程库文件(图 1.13),库文件是二进制的,在库文件中是
看不到原始的源代码的。库和可执行文件的区别是,库不是独立程序,他们是向
其他程序提供服务的代码。
当然使用库文件的好处不仅仅是对源代码进行保密,使用库文件还可以减少
重复编译的时间,增强程序的模块化。将库文件连接到程序中,有两种方式,一
种是静态连接库,另一种是动态连接库。如果希望了解更多关于库文件的知识,
请查阅相关资料,再次不详细分析它们之间的异同。
#include "foo.h"
int main()
{
int i=foo(3,4);
return i;
}
#include "foo.h"
int foo(int i, int j)
{
……
}
int foo(int i, int j);
1. foo()
函数
这样用对
么?
2.
函数声明是
int
foo(int i, int j)
,你的
调用看上去是对的。
main.cpp
foo.h
foo.cpp
11
编辑
main.cpp
编译
foo.lib
main.obj
main.exe
连接
编辑
foo.cpp
编译
foo.obj
用户
开发者
图 1.13 库是二进制的文件,里面包含一系列子程序(图有问题)
1.9 OpenCV 是什么
OpenCV 其实就是一堆 C 和 C++语言的源代码文件,这些源代码文件中实现
了许多常用的计算机视觉算法。例如 C 接口函数 cvCanny()实现了 Canny 边缘提
取算法。可以直接将这些源代码添加到我们自己的软件项目中,而不需要自己再
去写代码实现 Canny 算法,也就是不需要重复“造轮子”。
由于 OpenCV 中源代码文件巨多,根据算法的功能,将这些源文件分到多个
模块中:core、imgproc、highgui 等。将每个模块中的源文件编译成一个库文件
(如 opencv_core.lib、opencv_imgproc.lib、opencv_highgui.lib 等),用户在使用时,
仅将所需的库文件添加到自己的项目中,与自己的源文件一起连接成可执行程序
则可。
剩余50页未读,继续阅读
weixin_38881822
- 粉丝: 22
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 计算机人脸表情动画技术发展综述
- 关系数据库的关键字搜索技术综述:模型、架构与未来趋势
- 迭代自适应逆滤波在语音情感识别中的应用
- 概念知识树在旅游领域智能分析中的应用
- 构建is-a层次与OWL本体集成:理论与算法
- 基于语义元的相似度计算方法研究:改进与有效性验证
- 网格梯度多密度聚类算法:去噪与高效聚类
- 网格服务工作流动态调度算法PGSWA研究
- 突发事件连锁反应网络模型与应急预警分析
- BA网络上的病毒营销与网站推广仿真研究
- 离散HSMM故障预测模型:有效提升系统状态预测
- 煤矿安全评价:信息融合与可拓理论的应用
- 多维度Petri网工作流模型MD_WFN:统一建模与应用研究
- 面向过程追踪的知识安全描述方法
- 基于收益的软件过程资源调度优化策略
- 多核环境下基于数据流Java的Web服务器优化实现提升性能
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功