OpenCV入门

OpenCV : [Open Computer Vision Library] 是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在LinuxWindowsAndroidMac OS等众多操作系统上。

备注: 由于OpenCV 的官网 https://opencv.org 无法打开,建议访问 github

在这里插入图片描述

一、GitHub获取openCV

1、预编译版安装

访问 https://github.com/opencv/opencv/release 地址,下载 "opencv-4.9.0-windows.exe"(precompile)版本 。

在这里插入图片描述

网络好的情况下,下载 "opencv-4.9.0-windows.exe" 很快;网络不好的情况下,可以换个时间段试一试。

在这里插入图片描述

① 安装
  • 双击 "opencv-4.9.0-windows.exe"程序,选择安装目录。

在这里插入图片描述

在这里插入图片描述

② 环境变量配置(该步骤可以不做)
  • 以管理员运行安装目录下的 "setup_vars_opencv4.cmd" 脚本进行环境变量设置。

在这里插入图片描述

  • "setup_vars_opencv4.cmd" 脚本内容如下:
@ECHO OFF

SET "SCRIPT_DIR=%~dp0"

IF NOT DEFINED OPENCV_QUIET ( ECHO Setting vars for OpenCV 4.9.0 )
SET "PATH=%SCRIPT_DIR%\x64/vc16/bin;%PATH%"

IF NOT DEFINED OPENCV_SKIP_PYTHON CALL :SET_PYTHON

SET SCRIPT_DIR=

IF NOT [%1] == [] GOTO :RUN_COMMAND

GOTO :EOF

:RUN_COMMAND
SET RUN_INTERACTIVE=1
echo %CMDCMDLINE% | find /i "%~0" >nul
IF NOT errorlevel 1 set RUN_INTERACTIVE=0

%*
SET RESULT=%ERRORLEVEL%
IF %RESULT% NEQ 0 (
  IF _%RUN_INTERACTIVE%_==_0_ ( IF NOT DEFINED OPENCV_BATCH_MODE ( pause ) )
)
EXIT /B %RESULT%

:SET_PYTHON
SET "PYTHONPATH_OPENCV=%SCRIPT_DIR%\python"
IF NOT DEFINED OPENCV_QUIET ( ECHO Append PYTHONPATH: %PYTHONPATH_OPENCV% )
SET "PYTHONPATH=%PYTHONPATH_OPENCV%;%PYTHONPATH%"
SET PYTHONPATH_OPENCV=
EXIT /B


:EOF
③ C/C++ API
#1. 动态库、静态库路径
C:\opencv\build\x64\vc16\bin
C:\opencv\build\x64\vc16\lib

#2.头文件路径
C:\opencv\build\include

2、源码编译安装

① 下载源码

github 下载 "opencv-4.9.0.zip""opencv_contrib-4.9.0.zip"

在这里插入图片描述

下载 opencv_contrib 源码。

在这里插入图片描述

关于opencv_contrib 解释如下:

在这里插入图片描述

② 准备工作

"opencv-4.9.0.zip""opencv_contrib-4.9.0.zip" 解压到同一个目录下,如解压到 opencv-source 目录下。

在这里插入图片描述
在这里插入图片描述

③ 开始编译

进入到 opencv-4.9.0 目录,创建临时编译目录 "opencv_build_dir" (这样不污染源码),进入到临时编译目录,执行CMD命令。

官网提供的命令如下:

$ cd <opencv_build_directory>
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>
$ make -j5
  • Windows 配置生成命令如下:
C:\Tools\opencv-source\opencv-4.9.0\opencv_build_dir>cmake -DOPENCV_EXTRA_MODULES_PATH=C:\Tools\opencv-source\opencv_contrib-4.9.0\modules C:\Tools\opencv-source\opencv-4.9.0

配置完成。

在这里插入图片描述

  • Windows 编译命令如下:
cmake --build ./ -j5

在这里插入图片描述

编译完成,分别在 binlib 目录下生成对应的文件。

在这里插入图片描述

3、VS2019验证

① 显示图片

创建 VS2019工程,验证opencv是否可用。

#include <opencv2/opencv.hpp>

int main()
{
	cv::Mat img = cv::imread("cat.jpg");
    if(img.empty()) return -1;
    cv::namedWindow("CAT",cv::WINDOW_AUTOSIZE);
	cv::imshow("CAT", img);
	cv::waitKey(0);
    cv::destroyWindow("CAT");
}
首先OpenCV的函数都位于命名空间cv下,如果想省略cv::,可以在前面用using namespace cv。但这样存在与其他命名空间冲突的风险。

函数imread()根据文件名来决定图像格式的处理,也会自动申请图像需要的内存,它可以读取很多种图像格式,函数返回一个Mat结构,这个结构是OpenCV中你会接触的最多的自带结构,OpenCV用这个结构来处理所有类型的图像:单通道、多通道、整型、浮点数以及各种类型。

函数namedWindow由HighGUi模块提供,将一个名称赋予窗口。第二个参数说明了Windows的特性。默认情况下全部设置为0,也可以设置为WINDOW_AUTOSIZE,这样窗口的大小会和载入图像的大小一致,图像会被缩放以使用窗口。

通过imshow()来进行显示。imshow()将建一个窗口。(如果窗口不存在他会自动调用namedWindow()新建一个窗口)。调用imshow()时窗口将被重绘上要求的图片,并且窗口会自动调整大小(使用参数WINDOW_AUTOSIZE)。

waitkey(0)函数告诉系统暂停并等待键盘事件。如果传入参数大于0则会意味着程序等待的毫秒数,比如waitkey(100)就是等待100毫秒,如果100毫秒没有键盘事件就会继续执行程序。0或负数表示等待无限长时间。

最后用函数destroywindow()来让窗口自行销毁。
  • 库文件配置:

在这里插入图片描述

在这里插入图片描述

  • 运行效果如下:

在这里插入图片描述

② 播放视频
  • 视频获取方式: *.mp4 文件可以通过 “电脑录屏软件”录制。

在这里插入图片描述

视频播放代码如下:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;
int main(int argc, char** argv) {
	namedWindow("test", WINDOW_AUTOSIZE);
	VideoCapture cap;
	cap.open("猫和老鼠.mp4");
	Mat frame;
	for (;;) {
		cap >> frame;
		if (frame.empty())break;
		imshow("test", frame);
		if (waitKey(33) >= 0)break;
	}
	return 0;
}

上述代码运行后,不会出现视频,且调试模式下 cap.open("猫和老鼠.mp4") 返回结果为 false

  • *.mp4视频文件无法播放问题解决方案:

"opencv_videoio_ffmpeg490_64.dll""opencv_videoio_msmf490_64d.dll" 两个动态库放到 exe 目录下。

在这里插入图片描述

  • 运行效果如下:

在这里插入图片描述

③ 打开摄像头
int main(int argc,char** argv)
{
    cv::namedWindow("test", cv::WINDOW_AUTOSIZE);
    cv::VideoCapture cap;
    if (argc == 1) {
        cap.open(0);
    }
    else {
        cap.open(argv[1]);
    }
    if (!cap.isOpened()) {
        std::cerr << "could not open capture" << std::endl;
        return -1;
    }
    cv::waitKey(0);
    return 0;
}

备注:

  • 同一个对象可以读取时从文件也可以连接摄像头。

  • 连接一个摄像头(cap.open())需要给它一个相机ID号(如果只有一个摄像头连接,这个ID通常为0),ID的默认值为-1,这意味着随意选择一个。

④ 播放摄像头

播放代码如下:

#include <opencv2/opencv.hpp>

int main()
{
    //窗口自适应
	cv::namedWindow("Capture", cv::WINDOW_AUTOSIZE);

	cv::VideoCapture cap;

	//打开第一个摄像头
	cap.open(0);  

	cv::Mat frame;
	for (;;) 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值