计算机视觉库OpenCV入门
OpenCV简单介绍
Wikipedia对OpenCV的简介如下:
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。
OpenCV是一个计算机视觉库,使用C++进行编写,并提供了多种语言的API以供使用者调用。OpenCV可用于解决诸如人脸识别、手势识别、动作识别、物体识别、图像分割等个领域。
OpenCV官方链接
OpenCV基础
颜色空间
颜色空间或称为颜色模型是数字图像处理领域中用于描述图像颜色的一类方法,常见的颜色空间有如下两种:
RGB:以Red(红)、Green(绿)、Blue(蓝),三原色以不同的强度进行混合来描述所有的颜色
HSX:H是色调,S是饱和度,X(I/V)强度(根据具体使用有所不同)
参见知乎专栏:数字图像处理之6大颜色空间
矩阵类cv::Mat
OpemCV使用Mat类来用作存放图像的容器,通过使用imread()函数将图像读入内存,函数返回一个实例化的Mat对象。在OpenCV中图像数组通常以一个三维数组的形式存在,数组的每个成员表示图像的每个像素的数据,三维数组的三个纬度分别是图像的长度、宽度、颜色,对于图像的颜色维度,常用的有:8位(1 Byte)的灰度图像,24位(3 Byte)的RGB图像,24位(3 Byte)的HSV图像等
参见官方文档:OpenCV4.5.1-cv::Mat
OpenCV With Python
- 开发环境:Python3.8 VSCode
- 新建python项目并导入OpenCV软件包
from cv2 import cv2
- 显示目录下名为
img.jpg
的图像
from cv2 import cv2
img = cv2.imread('img.jpg')
cv2.imshow('img',img)
cv2.waitkey(0)
OpenCV With Cpp
- 从Github下载对应适合自己版本的OpenCV Release包
本文使用的是:
Release版 opencv-4.5.1-dldt-2021.2-vc16-avx2
Debug版 opencv-4.5.1-dldt-2021.2-vc16-avx2-debug
- 开发环境:Visual Studio 2019
- 新建一个控制台项目,在项目属性中引入include路径与lib路径
- 添加附加依赖项(依赖项可根据项目的具体需求增减)
对于Debug版本添加下方依赖项(Release版本库名称末尾删除d即可):
opencv_calib3d451d.lib
opencv_core451d.lib
opencv_dnn451d.lib
opencv_features2d451d.lib
opencv_flann451d.lib
opencv_gapi451d.lib
opencv_highgui451d.lib
opencv_imgcodecs451d.lib
opencv_imgproc451d.lib
opencv_ml451d.lib
opencv_objdetect451d.lib
opencv_photo451d.lib
opencv_stitching451d.lib
opencv_video451d.lib
opencv_videoio451d.lib
- 显示指定目录下名为
img.jpg
的图像
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat img = cv::imread("D:\\image\\img.jpg");
cv::imshow("img", img);
cv::waitKey(0);
return 0;
}
OpenCV基础API
以Python版为例,cpp版API类似
# 读取图像
img = imread("D:\\image\\img.jpg")
# 显示图像
cv2.imshow('img', img)
# 等待按键按下
cv2.waitKey('q')
# BGR 转 HSV
imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# BGR 换 灰度(图像复杂度降阶)
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 图像消除噪声(高通滤波)
imgBlur = cv2.GaussianBlur(imgGray,(7,7),0)
# 图像边缘检测
imgCanny = cv2.Canny(img,150,200)
# 获取图像内所有的形状
cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
......