【个人笔记】00 OpenCV框架介绍+环境搭建

个人资料,仅供学习使用
学习课程:OpenCV4 图像处理与视频分析实战教程——贾志刚

00 OpenCV框架介绍+环境搭建

opencv知识点:

本课所解决的问题:

  • 什么是OpenCV框架?
  • 如何配置OpenCV环境?
  • 如何显示一张图像?
  • 为什么Debug下的cmd窗口会输出很多信息?

1.OpenCV 框架介绍

首先,我们先来介绍一下OpenCV的来龙去脉

发展和现状

alpha版与opencv1.0

OpenCV是一个开源计算机视觉的框架,这个框架最早可以追随到2004年。
2004年,英特尔在CVPR大会上给大家演示了一个新的计算机视觉的框架,不过这个框架只是alpha版本的,但即使如此演示之后还是获得了大家的一致好评与认可。

然后英特尔又继续开发了几年,到了2007年,正式发布了OpenCV1.0这个版本。
OpenCV1.0一经发布,就得到了业界的推崇,很多的计算机视觉开发者都用它来进行项目的开发。

opencv2.0

之后呢,业内在进行项目开发的时候,发现了一些问题,问题是什么呢?
OpenCV1.0版本是基于C开发出来的一个计算机视觉框架平台,在API层面来说,对于开发者并不是特别友好。
然后英特尔继续开发和维护,同时加上一些新的算法,到了2010年,发布了OpenCV2.0这个版本。

2.0这个版本解决了最大的两个痛点

  1. 在1.0版本时,当我们进行一个大型项目开发的时候,经常会发生内存泄漏的问题。
    所以在2.0版本时,OpenCV引入了智能指针这个东西,就把这个问题给解决了。
    解决了之后呢,大家就觉得可用性,可靠性提高了,这样工业界的对它的认可度又进一步提升。
  2. 基于C的API晦涩难懂,在开发时增加了人们的学习成本。
    当时面向对象编程这种方式已经非常流行了,而C语言传统的函数调用方式来阻碍了这个框架的进一步扩散传播,所以在这样的背景下了,英特尔在2.0开始,引入面向对象,把它慢慢的变成C++的接口。
    它的开发者人数又得到了进一步的提升。

opencv3.0

后面呢,大家对它的易用性,可靠性方面以及一些其他方面还有槽点。
OpenCV继续前进,到2014年,发布了OpenCV3.0的版本。

3.0版本摒弃了2.0版本的两种API方式,变成主要基于C++的方式,基于C++ Call API来进行调用。
同时3.0版本对更多的操作系统支持,比如Android OS,Mac OS,Linux,Windows,以及树莓派等等
这样呢,它的开发边界大大得到了拓展,使用人数以及使用的公司进一步增加,工业界的认可程度,又得到进一步的提升,OpenCV逐渐成为了一个头部的开源计算机视觉框架。

OpenCV框架的运营和维护由这个开源社区负责:opencv.org
这个社区背后,有英特尔,基金会等的经济支持。
它也有一个GitHub的地址:github.com/opencv,可以下载OpenCV的所有源代码。

opencv4.0

再后面到2018年11月份的时候,发布了OpenCV4.0版本。
4.0版本的最大的变化就是新增了对 DNN(Deep Neural Networks,深度神经网络)模块的支持,来跟我们现在深度学习来进一步进行一个拥抱。

在这个技术的基础之上,OpenCV焕发出基于深度学习的一系列新技术以及新开发方式。
这方面呢目前最流行的就是OpenCV+OpenVINO,然后再加上一些深度学习框架整合起来

GitHub说明

接下来我们介绍一下GitHub上的OpenCV仓库

主仓和扩展

opencv实际上分为两个部分

  • master - 主仓库
  • contrib - 扩展模块

在这里插入图片描述
它们有什么区别呢?

contrib有很多扩展模块,当有些模块很稳定,很多人需要的时候,opencv就会把这些模块放进master。
当master中有一些东西,受到版权或一些其他的限制,opencv就会把它们放进contrib中。

data目录

沿着opencv→samples→data目录下去,我们可以发现很多图片。

这些图片是opencv自带的例子,后续的演示中我们会用到。
在这里插入图片描述

框架结构

最后,我们介绍一下OpenCV的结构

OpenCV Conceptual Structure

先来看一下这张图
在这里插入图片描述

  1. 操作系统(下) 它支持Windows,Android,Mac OS,Linux,Ubuntu以及树莓派等操作系统。
  2. 语言(左) 在操作系统之上,它支持各种语言。 最底层是C,然后上面C++,Python,Java以及其他的语言(C#,JS等)。
  3. 模块(中下,知识基础) CORE - 核心 HighGUI - 图像用户界面 imgproc - 图像处理 Machine learning - 机器学习
  4. 模块(中上) 主要是特征提取的模块
  5. 指令集(右) 我们知道OpenCV是一个计算机视觉的库,我们需要它在实时的环境下面运行,早期呢我们就需要一些加速的指令集,如SSE,TBB等,通过这些指令集以及硬件达到一个很快的实时运行效果。
  6. 三角形(右上) 三角形就是它的扩展模块,当我们需要用到扩展模块库当中的一些东西的时候。我们就要遵循OpenCV社区的指导手册来对它进行编译,编译完了之后,我们才能获得那些目录,然后引入进来进行使用。

OpenCV Overview

下图中有很多的应用,我们主要针对图像处理和视频分析
在这里插入图片描述

Overview:Environment

在这里插入图片描述

OpenCV4

最新的OpenCV4呢,又跟其他的版本有些不一样。

一方面是有了C++11的新特性
一方面是OpenCV4在图像处理部分,二值图像分析,还有对象检测都有了一些新的东西。

2.环境搭建

环境搭建:00 环境配置与搭建 + 显示1张图片
只有一点不同,这里我们配置的是Debug版本,相应配置即可。
注意:只保留Debug模式的配置

3.显示1张图片

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main(int argc, char** agrv) {

	Mat src = imread("D:/Workspace/VS-Project/OpenCV/images/hahaha.jpg");

	if (src.empty()) {
		printf("could not find image file");
		return -1;
	}

	namedWindow("input", WINDOW_AUTOSIZE);

	imshow("input", src);

	waitKey(0);
	destroyAllWindows();

	return 0;
}

在这里插入图片描述

4.Debug下的cmd窗口输出

虽然我们能成功运行,但是cmd窗口会自动输出一堆日志。

笔者查证后发现,这是Debug下独有的,并与OpenCV的版本有关。
如有需要,调回Release就没有日志问题了。

以下是笔者遇到的日志输出

[ INFO:0@0.066] global c:\build\master_winpack-build-win64-vc15\opencv\modules\highgui\src\registry.impl.hpp (114) cv::highgui_backend::UIBackendRegistry::UIBackendRegistry UI: Enabled backends(4, sorted by priority): GTK(1000); GTK3(990); GTK2(980); WIN32(970) + BUILTIN(WIN32UI)
……………………
省略
……………………

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啦啦啦大赛第大所

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值