0 前言


OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。


1 什么是OpenCV?

OpenCV(开源计算机视觉库)是在 BSD 许可下发布的,因此它可以免费用于学术和商业用途。
它具有 C++,Python 和 Java 接口,支持 Windows,Linux,Mac OS,iOS 和 Android。
OpenCV 专为提高计算效率而设计,专注于实时应用。该库以优化的 C/C++ 编写,可以利用多核处理。
通过 OpenCL 启用,它可以利用底层异构计算平台的硬件加速。

OpenCV 在全球范围内采用,拥有超过 4.7 万用户社区,估计下载量超过 1400 万。
用途范围从交互式艺术,到地雷检查,网上拼接地图或高级机器人。

1.1 OpenCV

  • OpenCV 于 1999 年由 Gary Bradsky 在英特尔创立,第一个版本于 2000 年问世。Vadim Pisarevsky 加入了 Gary Bradsky,负责管理英特尔的俄罗斯软件 OpenCV 团队。2005 年,OpenCV 被用于 Stanley ,这辆车赢得了 2005 年美国穿越沙漠 DARPA 机器人挑战大赛。后来,在 Willow Garage 的支持下,在 Gary Bradsky 和 Vadim Pisarevsky 主导下,OpenCV 项目的开发工作变得活跃起来。OpenCV 现在支持与计算机视觉和机器学习相关的众多算法,并且每天都在拓展中。

  • OpenCV 支持各种编程语言,如 C++,Python,Java 等,可在不同的平台上使用,包括 Windows,Linux,OS X,Android 和 iOS。基于 CUDA 和 OpenCL 的高速 GPU 操作接口也在积极开发中。

  • OpenCV-Python 是 OpenCV 的 Python API,结合了 OpenCV C++ API 和 Python 语言的最佳特性。

1.2 OpenCV-Python

  • OpenCV-Python 是一个 Python 绑定库,旨在解决计算机视觉问题。

  • Python 是一种由 Guido van Rossum 开发的通用编程语言,它很快就变得非常流行,主要是因为它的简单性和代码可读性。它使程序员能够用更少的代码表达思想,而不会降低可读性。

  • 与 C/C++ 这类语言相比,Python 的速度更慢。好在,可以使用 C/C++ 轻松的拓展 Python ,我们可以在 C/C++ 中编写计算密集型代码,并用 Python 来封装。这给我们带来了两个好处:首先,代码像原始的 C/C++ 代码一样快(因为后台实际上就是 C/C++ 代码在工作),其次,在 Python 中编写代码比在 C/C++ 中更容易。OpenCV-Python 就是 OpenCV C++ 的 Python 封装。

  • OpenCV-Python 使用了 Numpy,这是一个有着 MATLAB 风格语法,高度优化的用于数值计算的库。所有 OpenCV 数组结构都与 Numpy 数组进行转换。这也使得与使用 Numpy 的其他库(如 SciPy 和 Matplotlib)集成更容易。


2 在线英文文档

https://opencv.apachecn.org/

3 新建项目

新建项目,路径不要出现中文
【OpenCV】基础知识-LMLPHP

文件夹名称
【OpenCV】基础知识-LMLPHP
添加解释器,添加本地解释器

这样就创建好了一个文件夹,然后像我这样一级一级向下分,细分文件夹
【OpenCV】基础知识-LMLPHP

【OpenCV】基础知识-LMLPHP

4 图像读取

4.1 读入图像

retval = cv2.imread(文件名, [显示控制参数])

范例:

cxk = cv2.imread("photo\\cxk.bmp")#导入图片

4.2 显示图像

None = cv2.imshow(窗口名, 图像名)

范例:

cv2.imshow('cxk',cxk)

4.3 保存图像

retval = cv2.imwrite(文件地址, 文件名)

范例:

cv2.imwrite('D:\\test.jpg',cxk)

4.4 Demo

4.4.1 Demo1

import cv2#opencv读取的格式是BGR
import numpy as np

cxk = cv2.imread("photo\\cxk.bmp")#导入图片

cv2.imshow('cxk',cxk)#等待时间,毫秒级,0表示任意键终止

cv2.waitKey()#按键终止
cv2.destoryAllWindows()

4.4.2 Demo2

#2023年11月26日15:47:19
import cv2
#绝对路径
img = cv2.imread("F:\\PycharmProjects\\OpenCV\\A1_Photo_Input\\photo\\tsy.jpg", cv2.IMREAD_UNCHANGED)    #导入图片
cv2.imshow("original", img)     #显示图片,名称叫demo

print( img[100,100] )    #读取BGR格式数值
img[150:240, 250:350] = [90, 25, 255]    #[100:200, 100:200] 这个范围内的像素 修改成白色
cv2.imshow("result", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

4.4.3 Demo3

#2023年12月8日11:59:50
from cv2 import cv2
import numpy as np
#获取图像属性

img = cv2.imread("photo\\tsy.jpg", cv2.IMREAD_UNCHANGED) #这是一个彩色图像
print(img.shape)    #计算图像的属性,输出是(1441, 960, 3)

print(img.size)     #4150080 = 1441*960*3
print(img.dtype)    #图像的数据类型 输出是uint8

5 ROI区域

import cv2
import numpy as np

a=cv2.imread("H:\\PycharmProjects\\OpenCV\\A1_Photo\\photo\\goutou.png",cv2.IMREAD_UNCHANGED)#这是一个彩色图像
b=cv2.imread("H:\\PycharmProjects\\OpenCV\\A1_Photo\\photo\\zxd.png",cv2.IMREAD_UNCHANGED)
cv2.imshow("original",a)#显示原始图像

face = np.ones((100,100,3))#生成一个感兴趣区域ROI,100行100列三个通道
face = a[0:290,0:290]
b[0+65:290+65,0+40:290+40] = face
cv2.imshow("face",b)#显示复制后的图像

cv2.waitKey(0)
cv2.destroyAllWindows()
08-23 16:17