OpenCV下载、安装以及使用

article/2025/10/9 12:02:58

一、安装Visual Studio

OpenCV是一种开源的计算机视觉开发库。既然是开发库,那么必须依托某种语言程序来加载。以C++为例,在安装OpenCV之前,必须安装C++的程序开发环境(IDE),在此我们选择Visual Studio Community——VS社区版,这个版本是免费的。

中文版下载安装地址:
https://visualstudio.microsoft.com/zh-hans/downloads/

注意这是一个在线安装的版本,请确保在安装过程中网络畅通。

二、创建C++程序

我们需要在VS中建立应用程序。在此我们建立最简单的基于控制台的应用程序,项目名为face1。
在这里插入图片描述

三、下载OpenCV

所谓OpenCV的安装,其实就是把OpenCV的库路径加入我们已有的项目路径集合当中。现在有两种方法,一种是自己下载OpencCV源码,在源码的基础上编译成库(lib/dll)文件,一种是下载直接编译好的库文件, 我们选择直接下载已经编译好的库文件

最新版OpenCV Lib 下载链接
https://sourceforge.net/projects/opencvlibrary/files/latest/download
一共266MB,外网有的时候挺慢的。

四、安装/配置OpenCV

下载后OpenCV后,运行,解压到一个固定目录。比如我的:“D:\试验\软件\opencv”——这个路径稍后要作为库和头文件的路径,加入以后C++程序项目中
在VS中,因为每个项目都是独立编译的,所以,每个项目具有自己的“规则包“。也就是说,对着项目名称右键,选择”属性“,可以配置该项目的编译规则。
现在我们在属性窗口中,配置OpenCV路径,步骤如下

1、在属性窗口中,我们选择输出目标”配置”为“Debug“,”平台“为”x64“。也就是编译输出在64位windows系统中运行的调试版(debug)应用程序
在这里插入图片描述

2、左边选择VC++目录,右边选中“包含目录“项进行编辑。把刚在OpenCV解压目录下的“include”目录包含进来。然后确定

3、重复上述步骤2。右边选中“库目录“项进行编辑。把刚在OpenCV解压目录下的“库目录”包含进来。然后确定
在这里插入图片描述

4、在属性窗口中,左边选中“链接器->输入“。右边选中“附加依赖项”。把刚在OpenCV解压后产生的静态引用库名字“opencv_world3416.lib”加进来(注意名字后面的数字部分视各个版本不同而不同)。然后确定。

在这里插入图片描述

5、最后将OpenCV解压目录下的dll文件拷贝到程序运行所在的目录

在这里插入图片描述

五、运行OpenCV程序

在已经建立好的项目“face1”的源代码中,加入opencv头文件
在这里插入图片描述

接着,在程序中就可以使用openCV所提供的库函数了。
比如在这个例子中:
我们读取事先准备好的一张图片,并输出它的尺寸:

在这里插入图片描述

运行结果:
在这里插入图片描述

六、利用OpenCV程序进行人脸检测。
这个实例在opencv安装目录下的“samples/c++”目录下。该目录有大量实例,可以一一尝试运行。

在这里插入图片描述

在此我们选择facedetect.cpp。复制相应代码运行
注意头文件需要做参照以下(而非例程中所示):

在这里插入图片描述

接着我们把这个项目所需要的数据文件移动到该项目应用程序所在目录

在这里插入图片描述
整个实验程序源码如下:

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;static void help(const char** argv)
{cout << "\nThis program demonstrates the use of cv::CascadeClassifier class to detect objects (Face + eyes). You can use Haar or LBP features.\n""This classifier can recognize many kinds of rigid objects, once the appropriate classifier is trained.\n""It's most known use is for faces.\n""Usage:\n"<<  argv[0]<<  "   [--cascade=<cascade_path> this is the primary trained classifier such as frontal face]\n""   [--nested-cascade[=nested_cascade_path this an optional secondary classifier such as eyes]]\n""   [--scale=<image scale greater or equal to 1, try 1.3 for example>]\n""   [--try-flip]\n""   [filename|camera_index]\n\n""example:\n"<<  argv[0]<<  " --cascade=\"data/haarcascades/haarcascade_frontalface_alt.xml\" --nested-cascade=\"data/haarcascades/haarcascade_eye_tree_eyeglasses.xml\" --scale=1.3\n\n""During execution:\n\tHit any key to quit.\n""\tUsing OpenCV version " << CV_VERSION << "\n" << endl;
}void detectAndDraw( Mat& img, CascadeClassifier& cascade,CascadeClassifier& nestedCascade,double scale, bool tryflip );string cascadeName;
string nestedCascadeName;int main( int argc, const char** argv )
{VideoCapture capture;Mat frame, image;string inputName;bool tryflip;CascadeClassifier cascade, nestedCascade;double scale;cv::CommandLineParser parser(argc, argv,"{help h""{cascade|data/haarcascades/haarcascade_frontalface_alt.xml|}""{nested-cascade|data/haarcascades/haarcascade_eye_tree_eyeglasses.xml|}""{scale|1|}{try-flip||}{@filename||}");if (parser.has("help")){help(argv);return 0;}cascadeName = parser.get<string>("cascade");nestedCascadeName = parser.get<string>("nested-cascade");scale = parser.get<double>("scale");if (scale < 1)scale = 1;tryflip = parser.has("try-flip");inputName = parser.get<string>("@filename");if (!parser.check()){parser.printErrors();return 0;}if (!nestedCascade.load(samples::findFileOrKeep(nestedCascadeName)))cerr << "WARNING: Could not load classifier cascade for nested objects" << endl;if (!cascade.load(samples::findFile(cascadeName))){cerr << "ERROR: Could not load classifier cascade" << endl;help(argv);return -1;}if( inputName.empty() || (isdigit(inputName[0]) && inputName.size() == 1) ){int camera = inputName.empty() ? 0 : inputName[0] - '0';if(!capture.open(camera)){cout << "Capture from camera #" <<  camera << " didn't work" << endl;return 1;}}else if (!inputName.empty()){image = imread(samples::findFileOrKeep(inputName), IMREAD_COLOR);if (image.empty()){if (!capture.open(samples::findFileOrKeep(inputName))){cout << "Could not read " << inputName << endl;return 1;}}}else{image = imread(samples::findFile("lena.jpg"), IMREAD_COLOR);if (image.empty()){cout << "Couldn't read lena.jpg" << endl;return 1;}}if( capture.isOpened() ){cout << "Video capturing has been started ..." << endl;for(;;){capture >> frame;if( frame.empty() )break;Mat frame1 = frame.clone();detectAndDraw( frame1, cascade, nestedCascade, scale, tryflip );char c = (char)waitKey(10);if( c == 27 || c == 'q' || c == 'Q' )break;}}else{cout << "Detecting face(s) in " << inputName << endl;if( !image.empty() ){detectAndDraw( image, cascade, nestedCascade, scale, tryflip );waitKey(0);}else if( !inputName.empty() ){/* assume it is a text file containing thelist of the image filenames to be processed - one per line */FILE* f = fopen( inputName.c_str(), "rt" );if( f ){char buf[1000+1];while( fgets( buf, 1000, f ) ){int len = (int)strlen(buf);while( len > 0 && isspace(buf[len-1]) )len--;buf[len] = '\0';cout << "file " << buf << endl;image = imread( buf, 1 );if( !image.empty() ){detectAndDraw( image, cascade, nestedCascade, scale, tryflip );char c = (char)waitKey(0);if( c == 27 || c == 'q' || c == 'Q' )break;}else{cerr << "Aw snap, couldn't read image " << buf << endl;}}fclose(f);}}}return 0;
}void detectAndDraw( Mat& img, CascadeClassifier& cascade,CascadeClassifier& nestedCascade,double scale, bool tryflip )
{double t = 0;vector<Rect> faces, faces2;const static Scalar colors[] ={Scalar(255,0,0),Scalar(255,128,0),Scalar(255,255,0),Scalar(0,255,0),Scalar(0,128,255),Scalar(0,255,255),Scalar(0,0,255),Scalar(255,0,255)};Mat gray, smallImg;cvtColor( img, gray, COLOR_BGR2GRAY );double fx = 1 / scale;resize( gray, smallImg, Size(), fx, fx, INTER_LINEAR_EXACT );equalizeHist( smallImg, smallImg );t = (double)getTickCount();cascade.detectMultiScale( smallImg, faces,1.1, 2, 0//|CASCADE_FIND_BIGGEST_OBJECT//|CASCADE_DO_ROUGH_SEARCH|CASCADE_SCALE_IMAGE,Size(30, 30) );if( tryflip ){flip(smallImg, smallImg, 1);cascade.detectMultiScale( smallImg, faces2,1.1, 2, 0//|CASCADE_FIND_BIGGEST_OBJECT//|CASCADE_DO_ROUGH_SEARCH|CASCADE_SCALE_IMAGE,Size(30, 30) );for( vector<Rect>::const_iterator r = faces2.begin(); r != faces2.end(); ++r ){faces.push_back(Rect(smallImg.cols - r->x - r->width, r->y, r->width, r->height));}}t = (double)getTickCount() - t;printf( "detection time = %g ms\n", t*1000/getTickFrequency());for ( size_t i = 0; i < faces.size(); i++ ){Rect r = faces[i];Mat smallImgROI;vector<Rect> nestedObjects;Point center;Scalar color = colors[i%8];int radius;double aspect_ratio = (double)r.width/r.height;if( 0.75 < aspect_ratio && aspect_ratio < 1.3 ){center.x = cvRound((r.x + r.width*0.5)*scale);center.y = cvRound((r.y + r.height*0.5)*scale);radius = cvRound((r.width + r.height)*0.25*scale);circle( img, center, radius, color, 3, 8, 0 );}elserectangle( img, Point(cvRound(r.x*scale), cvRound(r.y*scale)),Point(cvRound((r.x + r.width-1)*scale), cvRound((r.y + r.height-1)*scale)),color, 3, 8, 0);if( nestedCascade.empty() )continue;smallImgROI = smallImg( r );nestedCascade.detectMultiScale( smallImgROI, nestedObjects,1.1, 2, 0//|CASCADE_FIND_BIGGEST_OBJECT//|CASCADE_DO_ROUGH_SEARCH//|CASCADE_DO_CANNY_PRUNING|CASCADE_SCALE_IMAGE,Size(30, 30) );for ( size_t j = 0; j < nestedObjects.size(); j++ ){Rect nr = nestedObjects[j];center.x = cvRound((r.x + nr.x + nr.width*0.5)*scale);center.y = cvRound((r.y + nr.y + nr.height*0.5)*scale);radius = cvRound((nr.width + nr.height)*0.25*scale);circle( img, center, radius, color, 3, 8, 0 );}}imshow( "result", img );
}

运行程序。该程序会自动打开摄像头,识别并定位摄像头前的人脸以及眼睛部位。
输入q或者Q,退出程序。

下一篇------参数解析


http://chatgpt.dhexx.cn/article/5XyV4QrW.shtml

相关文章

Ubuntu下Opencv的安装(亲测有效,超级简单!)

一.安装包下载 1.Opencv安装包下载 在这里面选择你想下载的opencv版本&#xff0c;这里以Opencv-4.6.0为例。 2.opencv_contrib下载&#xff08;注意这里要与你上面下载的opencv版本一致&#xff09; 3.两个都下载好以后&#xff0c;把opencv_contrib放到解压后opencv文件夹…

【OpenCV入门指南】第一篇 安装OpenCV

【OpenCV第一篇】安装OpenCV 本篇主要介绍如何下载OpenCV安装程序&#xff0c;如何在VS2008下安装配置OpenCV&#xff0c;文章最后还介绍了一个使用OpenCV的简单小例子。 《OpenCV入门指南》系列文章地址&#xff1a;http://blog.csdn.net/morewindows/article/category/1291…

windows下OpenCV的安装配置部署详细教程

零、简介   OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发&#xff0c;以BSD许可证授权发行&#xff0c;可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及…

openCV安装教程

01 通过网络进行安装 (1).在windows界面里找到Anaconda3里的终端并启动&#xff08;高版本下的anaconda可能会有两个&#xff0c;若有两个任意一个即可&#xff09; 2.启动后输入&#xff1a;pip install opencv-python&#xff0c;未报安装错误即为安装成功。 02 通过whl文件…

第一章之OpenCV安装

opencv 安装 一、地址 opencv官网 opencv Github 官方安装流程 二、概述 opencv有两种安装方式&#xff1a;1、根据自己的平台选择官方编译好的版本&#xff1b;2、下载源码自己编译。 三、预编译版本 官方预编译版本满足大多数需求。预编译版本有两个途径&#xff1a;…

opencv安装教程(详细)小白教程

opencv安装教程&#xff08;详细&#xff09;小白教程 我们以OpenCv的最新版本为3.1.0版本为例介绍其配置方法。 opencv安装教程&#xff08;详细&#xff09;小白教程一、OpenCv的官方下载地址二、下载步骤1.点击libarary下拉框的release2.选择你想要的版本和系统&#xff08;…

opencv怎么安装?opencv下载安装教程

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。下面就介绍OpenCV的下载和安装方法。 opencv怎么安装&#xff1f; 软件准备 步骤1&#xff1a;在官网上下载OpenCV的安装包&#xff0c;由于服务器…

OpenCV安装教程(全网最细,小白直接上手!!!)

OpenCV是Python、Ruby、MATLAB的接口&#xff0c;OpenCV在计算机视觉的发展中发挥了重要的作用&#xff0c;使成千上万的人能够在视觉上做更多的工作。由于在VSLAM技术研究过程中&#xff0c;经常会涉及OpenCV不同版本在ubuntu系统下的安装。文章简单总结了一下两个版本的OpenC…

python下opencv安装

1、查看python版本 cmd输入命令行,python。 2、根据对应python版本&#xff0c;去https://www.lfd.uci.edu/~gohlke/pythonlibs/&#xff0c;下载对应版本的opencv。 我的python版本是3.8&#xff0c;64位&#xff0c;所以下载一下标红的链接。 3、下载 pip install wheel 4、…

OpenCV概述及安装配置教程

目录 一、OpenCV介绍及各个版本的区别1.1 OpenCV介绍1.2 OpenCV主要模块介绍1.3 python下OpenCV的配置 二、OpenCV的安装步骤2.1 下载OpenCV2.2 安装OpenCV2.3 配置环境变量 三、Visual Studio下配置OpenCV3.1 安装Visual Studio3.2 打开Visual Studio&#xff0c;新建一个解决…

pycharm+opencv安装总结

pycharm的安装与环境配置 1、安装 pycharm的安装很简单&#xff0c;在官网上下载之后按照步骤一步一步来安装&#xff0c;没什么难度。有个页面需要勾选的全勾上 pycharm安装地址&#xff1a; PyCharm: the Python IDE for Professional Developers by JetBrainshttps://www…

OpenCV安装配置教程VS2022(超级顺利)

前言 博主最开始没打算写这篇博客&#xff0c;只是想简单的在网上找一下最新版的OpenCV的安装配置教程&#xff0c;适用于VS2022的&#xff0c;但是我搜了一早上&#xff0c;也没搜到一个能让我成功安装配置的&#xff0c;看了很多很多文章&#xff0c;根本就没有几篇有用的。…

mnist数据集下载——mnist数据集提供百度网盘下载地址

mnist数据集是由深度学习大神 LeCun等人制作完成的数据集&#xff0c;mnist数据集也常认为是深度学习的“ Hello World&#xff01;”。 官网&#xff1a;http://yann.lecun.com/exdb/mnist/ mnist数据集由6万张训练数据和1万张测试数据组成。 官网提供下载&#xff0c;但由于…

MNIST数据集下载资源

MNIST数据集下载资源 提供MNIST数据集&#xff0c;并且教程MNIST放置文件夹路径为何~ MNIST数据集提供下载 MNIST数据集&#xff0c;提取码&#xff1a;egt7 MNIST下载后放置路径 Windows下需要放置在对应User下的.keras/dataset/目录下&#xff0c;Linux类似。

python中Keras下载mnist数据集

python中Keras下载mnist数据集 方法一&#xff1a; 直接写代码进行加载数据集&#xff0c;如果没有下载数据集&#xff0c;它会自动进行下载。示例&#xff1a; from keras.datasets import mnist (X_train, y_train), (X_test, y_test) mnist.load_data()等待下载完成即可…

mnist数据集python导入_Python读取MNIST数据集

和图像文件类似: 第1-4个byte存的是文件的magic number,对应的十进制大小是2049; 第5-8个byte存的是number of items,即label数量60000; 从第9个byte开始,每个byte存一个图片的label信息,即数字0-9中的一个。 计算一下训练集标签文件train-labels-idx1-ubyte的文件大小…

python调用数据集mnist_使用MNIST数据集进行分类

本文是对书《机器学习实战:基于Scikit-Learn和Tensorflow》第三章的知识学习以及代码复现,欢迎大家一起学习一起进步。 获取数据集 提前将MNIST数据集下载好,并放在’\scikit_learn_data’目录之下from sklearn.datasets import fetch_mldata mnist = fetch_mldata(MNIST or…

关于mnist数据集下载的相关问题

文章目录 问题描述&#xff1a;在Tensorflow 2.0.1版本中下载mnist数据集原因分析&#xff1a;解决方案&#xff1a; 问题描述&#xff1a;在Tensorflow 2.0.1版本中下载mnist数据集 from tensorflow.examples.tutorials.mnist import input_data mnist input_data.read_data…

mnist数据集无法下载

机器学习mnist数据集无法下载 最近在学习机器学习的过程中需要使用mnist数据集&#xff0c;但是貌似是TensorFlow更新&#xff0c;导致网上的安装教程无法使用(个人观点)&#xff0c;也许是因为安装的TensorFlow版本问题 问题1&#xff1a;由于连接方在一段时间后没有正确答复…

MNIST数据集下载 —— 数据集提供百度网盘下载地址

MNIST数据集是机器学习领域中非常经典的一个数据集&#xff0c;由60000个训练样本和10000个测试样本组成&#xff0c;每个样本都是一张28 * 28像素的灰度手写数字图片。 1. 点击进入&#x1f449;MNIST数据集官网 2. 点击进入&#x1f449;百度网盘地址 3. 点击进入&#x1f…