OpenCV作为最受欢迎的计算机视觉和机器学习库,究竟有何独特魅力?

2026-04-01 06:151阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1713个文字,预计阅读时间需要7分钟。

OpenCV作为最受欢迎的计算机视觉和机器学习库,究竟有何独特魅力?

OpenCV是一个基于Apache2.0许可(开源)的跨平台计算机视觉和机器学习软件库。支持在Linux、Windows、Android和Mac OS等操作系统上运行。它轻量级且高效,主要由C++函数和一系列C函数构成。


一、介绍

opencv是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv是一个非常好用的图像处理和分析库,它包括了平面特征提取,3D校准,对象侦查,图像处理,影像分析等功能,几乎可以满足在机器学习中所需要的,对图像的一切功能。

今天我们将介绍如何在Linux环境下安装opencv,并将其与php项目结合到一起使用。

二、安装准备

我们此次采用编译安装的模式进行部署,不同的php版本需要配合不同版本的opencv使用,这些模块的编译都需要cmake支持,所以我们需要提前了解一下各个模块的版本组合,避免多走弯路。

各模块版本映射表如下:

php

php-opencv

opencv

cmake

c++

5.6/5.7/5.8

暂无

2.0+

2.0.0+

>=8

7.0/7.1

7.2

3.0+

3.0.0+

>=10

7.2

7.2/7.3

OpenCV作为最受欢迎的计算机视觉和机器学习库,究竟有何独特魅力?

4.0+

3.5.1+

>=11

7.3

7.3

4.2+

3.10.0+

>=11

7.4/8.0/8.1/8.2

8.1+

4.5.5+

3.20.0+

>=11

标红那一行是我们今天使用的版本组合。详细版本如下:

  • php7.2.34
  • php-opencv-php7.2
  • opencv4.0.1
  • cmake3.15.0
  • c++11

三、安装cmake

3.1:下载安装包并解压

wget gitlab.kitware.com/cmake/cmake/-/archive/v3.15.0/cmake-v3.15.0.zip unzip cmake-v3.15.0.zip cd cmake-v3.15.0

3.2:编译安装

./bootstrap --system-curl //参数很重要,否则会报错 make make install

3.3:添加命令,测试

cmake默认安装目录在/usr/local下

ln -s /usr/local/bin/cmake /usr/bin/cmake

四、安装opencv

4.1:下载安装包并解压

wget codeload.github.com/opencv/opencv/zip/refs/tags/4.0.1 > opencv-4.0.1.zip unzip opencv-4.0.1.zip cd opencv-4.0.1

4.2:安装依赖

yum install gcc gcc-c++ gtk2-devel pkgconfig python python-devel python-numpy libdc1394-devel libv4l-devel gstreamer-plugins-base-devel libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel tbb-devel eigen3-devel

4.3:编译安装

mkdir build cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 sudo make install

4.4:测试

/usr/local/bin/opencv_version

版本号输出成功

4.5:配置pk-config

在下一步中我们编译php扩展默认需要依赖pk-config,为了避免麻烦,这里我们直接做一下配置。

touch /usr/lib64/pkgconfig/opencv4.pc //在依赖目录下创建pc文件 vim /usr/lib64/pkgconfig/opencv4.pc //编辑创建的pc文件 ... prefix=/usr/local //opencv4安装目录 exec_prefix=${prefix} includedir=${prefix}/include libdir=${exec_prefix}/lib Name: opencv Description: The opencv library Version:4.0.1 Cflags: -I${includedir}/opencv4 Libs: -L${libdir} -lopencv_stitching -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core //注意这里,不能乱加不存在的依赖,在后续使用的时候,编译器会校验依赖,如果发现不存在的依赖,会报错

默认情况下 pkg-config 的查找路径为 /usr/lib/pkgconfig 和 /usr/share/pkgconfig,也可以通过环境变量 PKG_CONFIG_PATH 在额外指定 pkg-config 的查找路径

配置成功后我们可以测试一下:

五、安装php-opencv扩展

5.1:下载扩展源码

git clone -b php7.2 github.com/php-opencv/php-opencv.git cd php-opencv

5.2:编译扩展

phpize ./configure --with-php-config=/usr/bin/php-config --enable-debug make CXXFLAGS='-std=c++11' //这里很重要,千万不要搞错,opencv4版本的话必须要c++11版本以上编译,这也是为啥前面步骤中要求安装c++11的原因 make install

5.3:配置php扩展

vim php.ini ... extension=opencv.so

六、php项目测试

测试代码:

<?php use CV\{Mat,Scalar, Point, Size}; use function CV\{ellipse, imwrite, waitKey}; use const CV\{CV_8UC3}; $windowWidth = 600; $thickness = 2; $lineType = 8; $matScalar = new Scalar(0,0,0); $mat = new Mat($windowWidth, $windowWidth, CV_8UC3, $matScalar); $point=new Point($windowWidth/2, $windowWidth/2); $size=new Size($windowWidth/4, $windowWidth/16); $scalar=new Scalar(255, 129, 0); for($i = 0; $i <= 360; $i += 45){ ellipse($mat,$point,$size,$i,0,360,$scalar,$thickness,$lineType); } imwrite('/tmp/ellipse.png',$mat); ?>

运行代码我们会得到一个漂亮的图像:

opencv有很多实用的函数,这里不再一一举例,想要发掘opencv更多功能的同学可以看我后面的文章,我将继续带大家发掘更多opencv用法

七、遇到的问题

问题1:cmake编译失败,在执行make阶段,如下图:

解决方案:这个原因其实是依赖错误导致的,libcmcurl链接库版本不对,解决办法就是指定curl依赖,可以在编译配置阶段加上如下配置:

./bootstrap 改为 ./bootstrap --system-curl

问题2:配置完php扩展后,测试的时候,发现opencv动态链接库找不到,报错如下:

解决方案:这个问题的原因是动态库依赖目录设置不正确,默认的LD_LIBRARY_PATH指向没有包含我们安装的opencv库,所以我们需要做以下处理:

export LD_LIBRARY_PATH="/usr/local/lib" //把opencv安装目录加到依赖查找



本文共计1713个文字,预计阅读时间需要7分钟。

OpenCV作为最受欢迎的计算机视觉和机器学习库,究竟有何独特魅力?

OpenCV是一个基于Apache2.0许可(开源)的跨平台计算机视觉和机器学习软件库。支持在Linux、Windows、Android和Mac OS等操作系统上运行。它轻量级且高效,主要由C++函数和一系列C函数构成。


一、介绍

opencv是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv是一个非常好用的图像处理和分析库,它包括了平面特征提取,3D校准,对象侦查,图像处理,影像分析等功能,几乎可以满足在机器学习中所需要的,对图像的一切功能。

今天我们将介绍如何在Linux环境下安装opencv,并将其与php项目结合到一起使用。

二、安装准备

我们此次采用编译安装的模式进行部署,不同的php版本需要配合不同版本的opencv使用,这些模块的编译都需要cmake支持,所以我们需要提前了解一下各个模块的版本组合,避免多走弯路。

各模块版本映射表如下:

php

php-opencv

opencv

cmake

c++

5.6/5.7/5.8

暂无

2.0+

2.0.0+

>=8

7.0/7.1

7.2

3.0+

3.0.0+

>=10

7.2

7.2/7.3

OpenCV作为最受欢迎的计算机视觉和机器学习库,究竟有何独特魅力?

4.0+

3.5.1+

>=11

7.3

7.3

4.2+

3.10.0+

>=11

7.4/8.0/8.1/8.2

8.1+

4.5.5+

3.20.0+

>=11

标红那一行是我们今天使用的版本组合。详细版本如下:

  • php7.2.34
  • php-opencv-php7.2
  • opencv4.0.1
  • cmake3.15.0
  • c++11

三、安装cmake

3.1:下载安装包并解压

wget gitlab.kitware.com/cmake/cmake/-/archive/v3.15.0/cmake-v3.15.0.zip unzip cmake-v3.15.0.zip cd cmake-v3.15.0

3.2:编译安装

./bootstrap --system-curl //参数很重要,否则会报错 make make install

3.3:添加命令,测试

cmake默认安装目录在/usr/local下

ln -s /usr/local/bin/cmake /usr/bin/cmake

四、安装opencv

4.1:下载安装包并解压

wget codeload.github.com/opencv/opencv/zip/refs/tags/4.0.1 > opencv-4.0.1.zip unzip opencv-4.0.1.zip cd opencv-4.0.1

4.2:安装依赖

yum install gcc gcc-c++ gtk2-devel pkgconfig python python-devel python-numpy libdc1394-devel libv4l-devel gstreamer-plugins-base-devel libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel tbb-devel eigen3-devel

4.3:编译安装

mkdir build cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 sudo make install

4.4:测试

/usr/local/bin/opencv_version

版本号输出成功

4.5:配置pk-config

在下一步中我们编译php扩展默认需要依赖pk-config,为了避免麻烦,这里我们直接做一下配置。

touch /usr/lib64/pkgconfig/opencv4.pc //在依赖目录下创建pc文件 vim /usr/lib64/pkgconfig/opencv4.pc //编辑创建的pc文件 ... prefix=/usr/local //opencv4安装目录 exec_prefix=${prefix} includedir=${prefix}/include libdir=${exec_prefix}/lib Name: opencv Description: The opencv library Version:4.0.1 Cflags: -I${includedir}/opencv4 Libs: -L${libdir} -lopencv_stitching -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core //注意这里,不能乱加不存在的依赖,在后续使用的时候,编译器会校验依赖,如果发现不存在的依赖,会报错

默认情况下 pkg-config 的查找路径为 /usr/lib/pkgconfig 和 /usr/share/pkgconfig,也可以通过环境变量 PKG_CONFIG_PATH 在额外指定 pkg-config 的查找路径

配置成功后我们可以测试一下:

五、安装php-opencv扩展

5.1:下载扩展源码

git clone -b php7.2 github.com/php-opencv/php-opencv.git cd php-opencv

5.2:编译扩展

phpize ./configure --with-php-config=/usr/bin/php-config --enable-debug make CXXFLAGS='-std=c++11' //这里很重要,千万不要搞错,opencv4版本的话必须要c++11版本以上编译,这也是为啥前面步骤中要求安装c++11的原因 make install

5.3:配置php扩展

vim php.ini ... extension=opencv.so

六、php项目测试

测试代码:

<?php use CV\{Mat,Scalar, Point, Size}; use function CV\{ellipse, imwrite, waitKey}; use const CV\{CV_8UC3}; $windowWidth = 600; $thickness = 2; $lineType = 8; $matScalar = new Scalar(0,0,0); $mat = new Mat($windowWidth, $windowWidth, CV_8UC3, $matScalar); $point=new Point($windowWidth/2, $windowWidth/2); $size=new Size($windowWidth/4, $windowWidth/16); $scalar=new Scalar(255, 129, 0); for($i = 0; $i <= 360; $i += 45){ ellipse($mat,$point,$size,$i,0,360,$scalar,$thickness,$lineType); } imwrite('/tmp/ellipse.png',$mat); ?>

运行代码我们会得到一个漂亮的图像:

opencv有很多实用的函数,这里不再一一举例,想要发掘opencv更多功能的同学可以看我后面的文章,我将继续带大家发掘更多opencv用法

七、遇到的问题

问题1:cmake编译失败,在执行make阶段,如下图:

解决方案:这个原因其实是依赖错误导致的,libcmcurl链接库版本不对,解决办法就是指定curl依赖,可以在编译配置阶段加上如下配置:

./bootstrap 改为 ./bootstrap --system-curl

问题2:配置完php扩展后,测试的时候,发现opencv动态链接库找不到,报错如下:

解决方案:这个问题的原因是动态库依赖目录设置不正确,默认的LD_LIBRARY_PATH指向没有包含我们安装的opencv库,所以我们需要做以下处理:

export LD_LIBRARY_PATH="/usr/local/lib" //把opencv安装目录加到依赖查找