OpenCV安装配置
- 进入opencv官网
点击library,进入其中的releases,选择最新版的包进行下载。(选择好自己电脑对应的版本)
- 下载好之后点击它,会生成一个文件夹
- 将文件夹放到自己喜欢的路径
- 环境配置
右键此电脑点击属性
点击高级系统设置,然后点击环境配置
然后在路径中找到opencv所在位置
计算机视觉所需要的编程基础
计算机视觉所需要的主流编程语言包括 C++ 和 Python
C++
在视觉和图像处理领域,C++ 由于其偏向底层且执行效率高,被广泛使用。使用人数多,网上也有丰富的学习资料。如果是做单纯的图像处理,那么 OpenCV 库的丰富组件以及C++的高效执行效率足以支撑大部分的图像处理问题。然而,当涉及到机器学习以及深度学习的内容时,会发现一方面 C++ 的开发效率实在太低了,另一方面,OpenCV 中虽然也包括了一些简单的统计学习算法的实现,但不够完善。
Python
一方面,在机器学习和深度学习领域,Python 是目前而言应用最为广泛的语言。另一方面,Python 相对来说是一种全能语言,图像处理方面,OpenCV 支持 Python 接口;科学计算方面,Anaconda 提供了丰富的包接口;网络爬虫等应用工具,多数也使用 Python 编写。简而言之,Python 易学易用,且开发效率很高。 想在计算机视觉方向发展的同学,在编程语言方面主要熟悉以上两种语言就可以了。
关于编程语言的学习,不推荐大家看书学习,最关键的事情是要动手练习,网上的教程大同小异,找到一个自己喜欢的,并把大致语法规则学习好,就可以开始上手编写小问题和小项目了。学习的关键在于动手练习,在写代码的过程中,遇到问题,要学会多查阅 Stack Overflow,GitHub 以及各类博客,边学边练。
API
- 加载图像的API是imread,函数原型是:
Mat imread( const String& filename, int flags = IMREAD_COLOR );`
函数参数含义如下:
(1)const String类型的filename,要加载的图像的文件名,可以包括路径。
(2)int类型的flags,加载图像的方式,默认是IMREAD_COLOR,也就是原图展示。
- 对于第二个参数,我们有如下不同的可取值:
(1)IMREAD_UNCHANGED:按原样返回加载的图像
(2)IMREAD_GRAYSCALE:将图像转换为单通道灰度图像输出
(3)IMREAD_COLOR:将图像转换为3通道BGR彩色图像
(4)IMREAD_ANYDEPTH:输入具有相应深度时返回16位/32位图像,否则将其转换为8位
(5)IMREAD_ANYCOLOR:以任何可能的颜色格式读取图像
(6)IMREAD_LOAD_GDAL:使用gdal驱动程序加载图像
(7)IMREAD_REDUCED_GRAYSCALE_2:图像转换为单通道灰度图像,图像大小减小1/2
(8)IMREAD_REDUCED_COLOR_2:将图像转换为3通道BGR彩色图像,图像大小减小1/2
(9)IMREAD_REDUCED_GRAYSCALE_4:将图像转换为单通道灰度图像,图像大小减小1/4
(10)IMREAD_REDUCED_COLOR_4:图像转换为3通道BGR彩色图像,图像大小减小1/4
(11)IMREAD_REDUCED_GRAYSCALE_8:将图像转换为单通道灰度图像,图像大小减小1/8
(12)IMREAD_REDUCED_COLOR_8:将图像转换为3通道BGR彩色图像,图像大小减小1/8
(13)IMREAD_IGNORE_ORIENTATION:不要根据EXIF的方向标志旋转图像
- 创建窗口的API是namedWindow,函数原型是:
void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
- 函数参数含义如下:
(1)const String类型的winname,要创建的窗口名称。
(2)int类型的flags,创建窗口类型,默认是WINDOW_AUTOSIZE,也就是自动尺寸,会根据图像本身的大小来确定窗口的大小。 - 对于第二个参数,我们有如下不同的可取值:
(1)WINDOW_NORMAL:用户可以调整窗口大小
(2)WINDOW_AUTOSIZE:加载图像大小
(3)WINDOW_OPENGL:支持opengl的窗口
(4)WINDOW_FULLSCREEN:窗口为全屏
(5)WINDOW_FREERATIO:图像尽可能地扩展
(6)WINDOW_KEEPRATIO:尊重图像的比率
(7)WINDOW_GUI_EXPANDED:状态栏和工具栏
(8)WINDOW_GUI_NORMAL:过时的方式
- 显示图像的API是imshow,函数原型是:
void imshow(const String& winname, InputArray mat);
函数参数含义如下:
(1)const String类型的winname,图像展示的窗口名称。
(2)InputArray类型的mat,要展示的图像。
- 修改图像的API是cvtColor,函数原型是:
void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
函数参数含义如下:
(1)InputArray类型的src,输入图像。
(2)OutputArray类型的dst,修改后的图像,图像尺寸和深度与输入图像一致。
(3)int类型的code,图像修改方式,取值于:ColorConversionCodes。
(4)int类型的dstCn,目标图像中的通道数;如果参数为0,通道数将自动从src和code获得。
-
对于第三个参数,取值于ColorConversionCodes:
我们发现,这些图像修改方式的格式都是固定的:COLOR_(类型1)2(类型2)
COLOR我们可以理解为图像色彩的变化,2和to谐音,就是从类型1转化到类型2,最常用的类型主要有如下几个:
BGR,RGB,BGRA,RGBA:B指的是blue蓝色,G指的是green绿色,R指的是red红色,A指的是alpha通道,表示图像的透明度。
GRAY:灰度图像。
HSV:hue saturation value,分别是色调(H),饱和度(S),明度(V) -
保存图像的API是imwrite,函数原型是:
bool imwrite( const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());
函数参数含义如下:
(1)const String类型的filename,图像输出名称,如果没有路径,就保存在代码同文件夹下。
(2)InputArray类型的img,要输出为文件的图像。
(3)const std::vector,表示特定格式的图像编码。参见cv::ImwriteFlags
- 对于参数3,具体的类型要参见cv::ImwriteFlags:
(1)IMWRITE_JPEG_QUALITY:对于JPEG,可以是0到100之间的质量(越高越好)。默认值为95。
(2)IMWRITE_JPEG_PROGRESSIVE:启用JPEG功能,0或1,默认为False。
(3)IMWRITE_JPEG_OPTIMIZE:启用JPEG功能,0或1,默认为False。
(4)IMWRITE_JPEG_RST_INTERVAL:JPEG重新启动间隔,0-65535,默认值为0-不重新启动。
(5)IMWRITE_JPEG_LUMA_QUALITY:单独的亮度质量等级,0 - 100,默认为0 -不使用。
(6)IMWRITE_JPEG_CHROMA_QUALITY:单独的色度质量等级,0 - 100,缺省值为0 -不要使用。
(7)IMWRITE_PNG_COMPRESSION:对于PNG,可以是0到9之间的压缩级别。较高的值意味着较小的大小和较长的压缩时间。如果指定,策略将更改为IMWRITE_PNG_strategy_DEFAULT(Z_DEFAULT_strategy)。默认值为1(最佳速度设置)
(8)IMWRITE_PNG_STRATEGY:默认为IMWRITE_PNG_STRATEGY_RLE。
(9)IMWRITE_PNG_BILEVEL:二进制级别PNG,0或1,默认值为0。
(10)IMWRITE_PXM_BINARY:对于PPM、PGM或PBM,它可以是二进制格式标志0或1。默认值为1。
(11)IMWRITE_EXR_TYPE:重写EXR存储类型(默认为浮点(FP32))
(12)IMWRITE_WEBP_QUALITY:对于WEBP,它可以是1到100的质量(越高越好)。默认情况下(不带任何参数),对于质量高于100的情况,使用无损压缩。
(13)IMWRITE_PAM_TUPLETYPE:对于PAM,将TUPLETYPE字段设置为为格式定义的相应字符串值。
(14)IMWRITE_TIFF_RESUNIT:对于TIFF,用于指定要设置的DPI分辨率单位;有关有效值,请参阅libtiff文档
(15)IMWRITE_TIFF_XDPI:对于TIFF,用于指定X方向DPI
(16)IMWRITE_TIFF_YDPI:对于TIFF,用于指定Y方向DPI。
(17)IMWRITE_TIFF_COMPRESSION:对于TIFF,用于指定图像压缩方案。有关与压缩格式对应的整数常量,请参见libtiff。注意,对于深度为CV f的图像,仅使用libtiff的SGILOG压缩方案。对于其他支持的深度,可以使用此标志指定压缩方案;默认为LZW压缩。
(18)IMWRITE_JPEG2000_COMPRESSION_X1000:对于JPEG2000,用于指定目标压缩率(乘以1000)。该值可以从0到1000。默认值为1000。