OpenCV入门教程
OPENCV初级教程及范例

OPENCV初级教程及范例一、安装OPENCV要使用OPENCV,首先需要在计算机上安装它。
安装步骤如下:3.打开命令行工具,并进入解压后的文件夹。
4.运行以下命令来编译和安装OPENCV:cmake .makesudo make install二、OPENCV基本概念1.图像数据结构在OPENCV中,图像被表示为一个多维数组,每个数组元素对应着图像中的一个像素。
例如,对于一个RGB彩色图像,每个像素由三个颜色通道(红、绿、蓝)组成,可以使用3维数组来表示。
2.图像读取和显示import cv2#读取图像image = cv2.imread("image.jpg")#显示图像cv2.imshow("Image", image)cv2.waitKey(0)cv2.destroyAllWindows3.图像处理import cv2import numpy as np#读取图像image = cv2.imread("image.jpg")#图像模糊处理kernel = np.ones((5,5), np.float32) / 25blurred = cv2.filter2D(image, -1, kernel) #显示处理后的图像cv2.imshow("Blurred Image", blurred)cv2.waitKey(0)cv2.destroyAllWindows三、OPENCV实例以下是一些使用OPENCV的实际范例:1.边缘检测import cv2#读取图像image = cv2.imread("image.jpg", 0)#边缘检测edges = cv2.Canny(image, 100, 200)#显示边缘图像cv2.imshow("Edges", edges)cv2.waitKey(0)cv2.destroyAllWindows2.目标识别import cv2#读取图像image = cv2.imread("image.jpg")#创建目标识别器cascade = cv2.CascadeClassifier("cascade.xml")#对图像进行目标识别objects = cascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))#绘制识别结果for (x, y, w, h) in objects:cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)#显示识别结果cv2.imshow("Objects", image)cv2.waitKey(0)cv2.destroyAllWindows这些范例只是OPENCV功能的冰山一角,OPENCV还提供了很多强大的功能和工具。
OpenCV计算机视觉库入门教程

OpenCV计算机视觉库入门教程Chapter 1: Introduction to OpenCVOpenCV (Open Source Computer Vision Library) is a widely used open-source library for computer vision and machine learning tasks. It provides a vast number of functions and algorithms for image and video processing, including object detection, face recognition, optical character recognition (OCR), and more. In this chapter, we will explore the basics of OpenCV and its key features.1.1 History and Development of OpenCVOpenCV was initially developed by Intel in 1999 as a research project for enhancing CPU efficiency. Later, it gained popularity and was released as an open-source library in 2000. Over the years, OpenCV has been continuously improved and extended by a large community of developers worldwide. Several major releases have been made, and it has become one of the most widely adopted computer vision libraries.1.2 Key Features of OpenCVOpenCV provides a wide range of features that enable developers to perform various computer vision tasks efficiently. Some of the key features include:- Image and Video I/O: OpenCV supports reading and writing images and videos in different formats, enabling easy access to data from various sources.- Image Processing: OpenCV offers a rich set of functions for image enhancement, such as filtering, resizing, rotating, and morphological operations.- Object Detection: OpenCV provides powerful algorithms for detecting and tracking objects in images and videos, including Haar cascades, HOG-based detectors, and deep learning networks.- Feature Detection and Description: OpenCV includes algorithms for detecting and describing local features in images, such as corner points and SIFT (Scale-Invariant Feature Transform) descriptors.- Camera Calibration: OpenCV supports camera calibration, which is essential for applications that require accurate measurement and reconstruction from images.- Machine Learning: OpenCV integrates with popular machine learning libraries, such as TensorFlow and PyTorch, allowing developers to build advanced computer vision models.- Stereoscopic Vision: OpenCV provides functions for stereo vision, enabling developers to reconstruct 3D scenes from pairs of images captured from different viewpoints.- GPU Acceleration: OpenCV supports GPU acceleration for computationally intensive tasks, leveraging the parallel processing capabilities of modern graphics cards.Chapter 2: Setting up OpenCV2.1 InstallationBefore getting started with OpenCV, you need to install it on your computer. OpenCV can be installed on multiple platforms, including Windows, macOS, and Linux. Each platform has its own installation instructions, which can be found on the official OpenCV website. Make sure to follow the installation guide specific to your operating system.2.2 Importing OpenCVOnce OpenCV is installed, you can start using it in your projects. In most programming languages, OpenCV provides bindings that allow developers to use its functions and classes. For example, in Python, you can import OpenCV using the following command:import cv2This imports the OpenCV module with the name 'cv2', which can then be used to access OpenCV functions and classes.Chapter 3: Basic Image Processing with OpenCV3.1 Loading and Displaying ImagesOne of the fundamental tasks in computer vision is loading and displaying images. In OpenCV, you can load an image using the'imread' function, which takes the image file path as input and returns a matrix representing the image. You can then display the loaded image using the 'imshow' function.3.2 Image FilteringImage filtering is a common technique used for enhancing or denoising images. OpenCV provides various filter functions, such as Gaussian blur, median blur, and bilateral filter. These filters can be applied to an image to remove noise or smooth its appearance.3.3 Image ThresholdingThresholding is a technique used to convert a grayscale image into a binary image. OpenCV offers several thresholding methods, including simple thresholding, adaptive thresholding, and Otsu's thresholding. These methods can be used to segment an image based on its pixel intensity.Chapter 4: Advanced Image Processing with OpenCV4.1 Object Detection using Haar CascadesHaar cascades are widely used for object detection in images and videos. OpenCV provides pre-trained Haar cascade models for various objects, such as faces, eyes, and cars. By using these models, you can detect objects in real-time or from pre-recorded videos.4.2 Feature Detection and DescriptionOpenCV includes algorithms for detecting and describing local features in images, such as corner points and SIFT descriptors. These features can be used for tasks like image matching, object recognition, and 3D reconstruction.4.3 Optical FlowOptical flow is a method used to estimate the motion of objects in a sequence of images. OpenCV offers optical flow algorithms, such as Lucas-Kanade and Farnebäck methods, which can be applied to track objects or analyze the movement of fluid substances.Chapter 5: Machine Learning with OpenCV5.1 Introduction to Machine Learning in OpenCVOpenCV provides machine learning algorithms that can be used for various tasks, such as classification, regression, clustering, and dimensionality reduction. These algorithms are implemented in the "ml" module of OpenCV.5.2 Training and Testing Machine Learning ModelsIn order to use machine learning in OpenCV, you need to train a model using a labeled dataset. OpenCV provides functions for training and testing machine learning models. You can use these functions to preprocess data, select features, train models, and evaluate their performance.5.3 Integration with Deep Learning LibrariesOpenCV can be seamlessly integrated with deep learning libraries, such as TensorFlow and PyTorch. This allows you to use pre-trained deep learning models in OpenCV for tasks like image classification, object detection, and semantic segmentation.Chapter 6: ConclusionIn this tutorial, we have explored the basics of OpenCV, including its history, key features, installation, and usage in various computer vision tasks. OpenCV is an essential library for anyone working in the field of computer vision and provides a comprehensive set of tools for image and video processing, object detection, machine learning, and more. With its extensive documentation and large community support, OpenCV continues to be a leading choice for researchers and developers in the computer vision domain.。
从零开始opencv学习2_显示视频

从零开始opencv学习2_显示视频第1步:安装软件VS2015、opencv3.2 略第2步:配置环境变量path路径并重启略第3步:新建工程:文件/新建/项目/visual c++/win32控制台应用程序/命名:例如test/选路径/确定/下一步/空项目/完成第4步:VS与opencv建立连接:项目/属性/VC++ 目录--Include path(包含目录):(安装opencv目录到include)D:\VC\opencv\build\includeD:\VC\opencv\build\include\opencvD:\VC\opencv\build\include\opencv2--Lib path(库目录):D:\VC\opencv\build\x64\vc14\lib--链接器--输入--附加依赖项:二选一一个对应debug 一个对应releaseopencv_world320.libopencv_world320d.lib第5步:建立CPP程序文件方法一:右键点击源文件/添加/新建项/C++文件/添加第6步:复制下面的程序到cpp里。
第7步:点击X86改为X64(我用的64位电脑系统)第8步:电脑连接有一个能够进行QQ视频的摄像头第9步:调试/开始执行解释:视频其实是很多张图片的连续变换,使用了一个死循环,不停的采集摄像头的图片并显示详细程序:#include<opencv2/core.hpp>#include<opencv2/highgui.hpp>#include<opencv2/videoio.hpp>//视频分析头文件using namespace cv;void main(){VideoCapture vi(0); //调用摄像头采集图像函数0表示默认摄像头,如果有多个摄像头可以为//1,2,3等while (1){namedWindow("1", WINDOW_GUI_NORMAL); //创建可以改变大小的窗口,窗口名1Mat out; //定义一个变量vi >> out; //将数据传给变量imshow("1", out); //输出显示waitKey(10); //延迟10ms}//vi.release();}。
opencv

python OpenCV 入门教程1、图像读入:cv2.imread()使用函数cv2.imread() 读入图像。
这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片。
• cv2.IMREAD_COLOR:读入一副彩色图像。
图像的透明度会被忽略,这是默认参数。
• cv2.IMREAD_GRAYSCALE:以灰度模式读入图像注意:调用opencv,就算图像的路径是错的,OpenCV 也不会报错或者有warning提示。
那么我们如何判断我们载入的图像是正确的呢?很简单,只需要判断print img时得到的结果是None则说明载入错误,否则载入正确。
2、显示图像cv2.imshow()使用函数cv2.imshow() 显示图像。
窗口会自动调整为图像大小。
第一个参数是窗口的名字,其次才是我们的图像。
你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字。
cv2.waitKey()是一个键盘绑定函数,需要指出的是它的时间尺度是毫秒级。
函数等待特定的几毫秒,看是否有键盘输入。
特定的几毫秒之内,如果按下任意键,这个函数会返回按键的ASCII码值,程序将会接着运行,如果没有键盘输入,返回值为-1,如果我们设置这个函数的参数为0,将会无限期的等待键盘输入。
也可以被用来检测特定键是否被按下,例如按键a是否被按下。
cv2.destroyAllwindows()cv2.destrouAllwindows()可以轻易剔除任何我们建立的窗口,如果你想删除特定的窗口可以使用cv2.destroywindow(),在括号内输入你想删除的窗口名。
3、保存图像cv2.imwrite()cv2.imwrite("lena.png",img) #很简单就可以生成一张图片例:import cv2img = cv2.imread("D:\liyao1.jpg",cv2.IMREAD_COLOR)cv2.imshow("Image",img)cv2.waitKey(0)cv2.destroyAllWindows()。
OpenCV入门教程

O p e n C V入门教程-CAL-FENGHAI.-(YICAI)-Company One1OpenCV 入门教程作者:于仕琪年 8 月版权所有于仕琪本作品采用知识共享署名-相同方式共享国际许可协议进行许可。
1前言OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。
很多初学者希望快速掌握OpenCV 的使用方法,但往往会遇到各种各样的困难。
其实仔细分析,造成这些困难的原因有两类:第一类是C/C++编程基础不过关;第二类是不了解算法原理。
解决这些困难无非提升编程能力,以及提升理论基础知识。
提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就,需要耐下心来认真修炼。
同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。
我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。
在实践中学习才是最高效的学习方式。
本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数据结构以及用法。
此外,如您发现有错误之处,欢迎来信指正。
于仕琪深圳大学插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的研究生。
欲了解详情可以访问深圳大学招生网或者给我发 email。
目录第 1 章预备知识 (5)编程的流程 (5)什么叫编辑 (6)什么叫编译 (6)什么叫连接 (7)什么叫运行 (7)Visual C++是什么 (8)头文件 (9)库文件 (10)OpenCV 是什么 (11)什么是命令行参数 (12)常见编译错误 (13)找不到头文件 (13)拼写错误 (14)常见链接错误 (15)运行时错误 (17)第 2 章OpenCV 介绍 (19)OpenCV 的来源 (19)OpenCV 的协议 (19)第 3 章图像的基本操作 (21)图像的表示 (21)Mat 类 (23)创建 Mat 对象 (24)构造函数方法 (24)create()函数创建对象 (25)Matlab 风格的创建对象方法 (26)矩阵的基本元素表达 (26)像素值的读写 (27)at()函数 (28)使用迭代器 (29)通过数据指针 (30)选取图像局部区域 (32)单行或单列选择 (32)用 Range 选择多行或多列 (33)感兴趣区域 (33)取对角线元素 (34)Mat 表达式 (34)Mat_类 (36)Mat 类的内存管理 (38)输出 (40)Mat 与 IplImage 和 CvMat 的转换 (42)Mat 转为 IplImage 和 CvMat 格式 (42)IplImage 和 CvMat 格式转为 Mat (42)第 4 章数据获取与存储 (44)读写图像文件 (44)读图像文件 (44)写图像文件 (45)读写视频 (47)读视频 (47)写视频 (49)第1章预备知识OpenCV 是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计算机视觉理论知识外,还需要具有一定的编程能力。
Opencv新手教程

Opencv新手教程OpenCV是一个开源的计算机视觉库,用于处理图像和视频的各种任务。
它是一个强大的工具,可以应用于从简单的图像处理到复杂的计算机视觉任务。
在本教程中,我们将介绍一些基本的OpenCV功能和使用方法,以帮助你入门。
1. 安装OpenCV2. 导入OpenCV库在你的代码中,你需要导入OpenCV库。
你可以使用以下命令导入OpenCV库:import cv23.加载图像在OpenCV中,你可以使用imread(函数加载图像。
这个函数接受图像的文件路径作为参数,并返回一个代表图像的多维数组。
以下是一个加载图像的例子:image = cv2.imread('image.jpg')4.显示图像你可以使用imshow(函数显示图像。
这个函数接受两个参数,第一个参数是窗口的名称,第二个参数是要显示的图像。
以下是一个显示图像的例子:cv2.imshow('Image', image)cv2.waitKey(0)cv2.destroyAllWindows这个例子中,图像将在一个名为"Image"的窗口中显示。
你可以使用waitKey(函数等待用户的按键操作,然后使用destroyAllWindows(函数关闭窗口。
5.图像预处理OpenCV提供了许多图像预处理功能,如图像的调整、裁剪、旋转、缩放等。
你可以使用这些功能来改变图像的外观和大小。
以下是一些常用的图像预处理函数的例子:gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 将图像转换为灰度图像resized_image = cv2.resize(image, (width, height)) # 调整图像大小cropped_image = image[y:y+h, x:x+w] # 裁剪图像rotated_image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) # 旋转图像这个例子中,我们将图像转换为灰度图像、调整大小、裁剪和旋转图像。
opencv基本操作
opencv基本操作OpenCV(OpenSourceComputerVisionLibrary)是一个开源计算机视觉库,是计算机视觉领域中最常用的库之一。
它由C++编写,支持Python、Java等多种编程语言。
OpenCV提供了各种各样的算法和函数,可用于图像处理、计算机视觉和机器学习等领域。
本文将介绍OpenCV的基本操作,包括图像的读取、显示、保存、颜色空间转换、图像缩放、图像平移、图像旋转、图像翻转、图像阈值化、图像平滑、边缘检测等。
1. 图像的读取、显示、保存OpenCV可以读取多种格式的图像文件,包括BMP、JPEG、PNG、TIFF等。
读取图像的函数是cv::imread(),语法如下:cv::Mat cv::imread(const string& filename, int flags = cv::IMREAD_COLOR);其中,filename是要读取的图像文件名,flags是读取图像的方式,可以是cv::IMREAD_COLOR(默认)、cv::IMREAD_GRAYSCALE(灰度图像)、cv::IMREAD_UNCHANGED(包括alpha通道的图像)等。
读取图像后,可以使用cv::imshow()函数将图像显示出来,语法如下: void cv::imshow(const string& winname, InputArray mat);其中,winname是窗口的名称,mat是要显示的图像。
最后,使用cv::imwrite()函数将图像保存到文件中,语法如下:bool cv::imwrite(const string& filename, InputArray img, const vector<int>& params = vector<int>());其中,filename是要保存的图像文件名,img是要保存的图像,params是保存图像的参数,比如JPEG的压缩质量等。
opencv2基本操作
opencv2基本操作OpenCV2基本操作——一步一步回答引言:OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,旨在提供一系列图像处理和计算机视觉算法的函数,可用于处理图像、视频、对象识别等应用。
本文将介绍OpenCV2的基本操作,以中括号为主题,带您一步一步了解如何使用OpenCV2进行图像处理和计算机视觉。
第一步:安装和配置OpenCV21. 下载OpenCV2库:打开OpenCV官网(2. 安装OpenCV2:根据下载的安装包进行安装,并按照安装向导完成安装过程。
3. 配置环境变量:在系统环境变量中添加OpenCV2库的路径,以便编译和执行OpenCV2的程序。
第二步:导入OpenCV2模块在Python中,我们可以使用"import cv2"语句导入OpenCV2模块。
这将使我们能够使用OpenCV2的函数和方法。
第三步:图像读取和显示1. 使用"cv2.imread()"函数读取图像文件:可以传递图像文件路径作为参数,函数将返回一个代表图像的numpy数组。
2. 使用"cv2.imshow()"函数显示图像:将图像的numpy数组作为第一个参数传递给该函数,然后指定窗口的名称作为第二个参数。
示例代码:pythonimport cv2# 读取图像image = cv2.imread("image.jpg")# 显示图像cv2.imshow("Image", image)# 等待按键cv2.waitKey(0)# 关闭窗口cv2.destroyAllWindows()第四步:图像保存使用"cv2.imwrite()"函数保存图像。
该函数需要传递保存路径和图像的numpy 数组作为参数。
如果路径不存在,函数将创建该路径。
opencv4应用开发-入门,进阶与工程化实践
opencv4应用开发-入门,进阶与工程化实践引言随着计算机视觉技术的飞速发展,OpenCV已成为计算机视觉领域的核心库。
OpenCV4在图像处理、目标检测、机器学习等领域的应用日益广泛。
本文将带领大家从入门到进阶,再到工程化实践,深入探索OpenCV4的魅力。
第一部分:入门篇1.1 OpenCV4简介首先,我们来了解一下OpenCV4。
OpenCV是一个开源的计算机视觉库,包含了大量的图像处理和计算机视觉的算法。
OpenCV4在保持原有功能的基础上,进一步优化了算法性能,并增加了许多新的功能模块。
1.2 环境配置在开始OpenCV的学习之前,我们需要配置好开发环境。
这包括安装OpenCV 库、选择合适的编程语言(如Python、C++等)以及相应的开发工具(如PyCharm、Visual Studio等)。
1.3 基本操作在掌握了环境配置后,我们可以开始学习OpenCV的基本操作,如图像的读取、显示、保存等。
通过这些基础操作,我们可以对图像进行简单的处理,如灰度转换、噪声去除等。
第二部分:进阶篇2.1 图像处理算法在掌握了基本操作后,我们可以进一步学习OpenCV提供的各种图像处理算法,如滤波、边缘检测、形态学处理等。
这些算法可以帮助我们更好地理解和处理图像。
2.2 目标检测与跟踪目标检测和跟踪是计算机视觉的重要应用之一。
OpenCV提供了多种目标检测和跟踪的方法,如Haar级联、HOG+SVM、深度学习模型等。
通过这些方法,我们可以实现人脸检测、行人检测等功能。
2.3 机器学习与计算机视觉近年来,机器学习在计算机视觉领域的应用越来越广泛。
OpenCV4结合了多种机器学习算法,如支持向量机、随机森林等,使得我们可以在计算机视觉任务中更好地利用机器学习的能力。
第三部分:工程化实践篇3.1 项目管理与团队协作在大型项目中,良好的项目管理至关重要。
我们需要根据项目的需求,制定合适的开发计划,并进行有效的团队协作。
opencvPPT
1.AdaptiveThreshold自适应阈值方法 void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C, int threshold_type=CV_THRESH_BINARY, int block_size=3, double param1=5 ); 函数 cvAdaptiveThreshold 将灰度图像变换到二值图像 2.Threshold对数组元素进行固定阈值操作 void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); 函数 cvThreshold 对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈 值操作得到二值图像。 或者是去掉噪声,例如过滤很小或很大象素值的图像点。 3.CvtColor色彩空间转换 void cvCvtColor( const CvArr* src, CvArr* dst, int code ); 函数 cvCvtColor 将输入图像从一个色彩空间转换为另外一个色彩空间。 4.Integral计算积分图像 void cvIntegral( const CvArr* image, CvArr* sum, CvArr* sqsum=NULL, CvArr* tilted_sum=NULL ); 利用积分图像,可以计算在某象素的上-右方的或者旋转的矩形区域中进行求和、求均值以 及标准方差的计算,并且保证运算的复杂度为O(1)。 可以在变化的窗口内做快速平滑或窗口相关等操作。 5.Filter2D对图像做卷积 void cvFilter2D( const CvArr* src, CvArr* dst,const CvMat* kernel, CvPoint anchor=cvPoint(-1,-1)); 6.Smooth各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, double param4=0 );
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenCV 入门教程作者:于仕琪shiqi.yu@2012 年 8 月版权所有©于仕琪本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
前言OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。
很多初学者希望快速掌握OpenCV 的使用方法,但往往会遇到各种各样的困难。
其实仔细分析,造成这些困难的原因有两类:第一类是C/C++编程基础不过关;第二类是不了解算法原理。
解决这些困难无非提升编程能力,以及提升理论基础知识。
提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就,需要耐下心来认真修炼。
同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。
我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。
在实践中学习才是最高效的学习方式。
本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数据结构以及用法。
此外,如您发现有错误之处,欢迎来信指正。
于仕琪深圳大学插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的研究生。
欲了解详情可以访问深圳大学招生网/或者给我发 email。
目录第 1 章预备知识 (5)1.1 编程的流程 (5)1.2 什么叫编辑 (6)1.3 什么叫编译 (6)1.4 什么叫连接 (7)1.5 什么叫运行 (7)1.6 Visual C++是什么 (8)1.7 头文件 (9)1.8 库文件 (10)1.9 OpenCV 是什么 (11)1.10 什么是命令行参数 (12)1.11 常见编译错误 (13)1.11.1 找不到头文件 (13)1.11.2 拼写错误 (14)1.12 常见链接错误 (15)1.13 运行时错误 (17)第 2 章OpenCV 介绍 (19)2.1 OpenCV 的来源 (19)2.2 OpenCV 的协议 (19)第 3 章图像的基本操作 (21)3.1 图像的表示 (21)3.2 Mat 类 (23)3.3 创建 Mat 对象 (24)3.3.1 构造函数方法 (24)3.3.2 create()函数创建对象 (25)3.3.3 Matlab 风格的创建对象方法 (26)3.4 矩阵的基本元素表达 (26)3.5 像素值的读写 (27)3.5.1 at()函数 (28)3.5.2 使用迭代器 (29)3.5.3 通过数据指针 (30)3.6 选取图像局部区域 (32)3.6.1 单行或单列选择 (32)3.6.2 用 Range 选择多行或多列 (33)3.6.3 感兴趣区域 (33)3.6.4 取对角线元素 (34)3.7 Mat 表达式 (34)3.8 Mat_类 (36)3.9 Mat 类的内存管理 (38)3.10 输出 (40)3.11 Mat 与 IplImage 和 CvMat 的转换 (42)3.11.1 Mat 转为 IplImage 和 CvMat 格式 (42)3.11.2 IplImage 和 CvMat 格式转为 Mat (42)第 4 章数据获取与存储 (44)4.1 读写图像文件 (44)4.1.1 读图像文件 (44)4.1.2 写图像文件 (45)4.2 读写视频 (47)4.2.1 读视频 (47)4.2.2 写视频 (49)第1章预备知识OpenCV 是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计算机视觉理论知识外,还需要具有一定的编程能力。
本书作者通过对OpenCV 中文论坛中的大量问题观察,发现有很大比例的问题是因为用户对C/C++语言不熟练,导致出错,或出错后不知如何解决。
如果对C/C++语言不熟悉,那使用 OpenCV 时会满头雾水瞎摸索,费心费力。
在这一章中,将介绍一些编程的基本概念,让读者对编程的流程有一个基本了解。
这样在出现错误时,可以快速确定错误的类型,并知道该如何解决。
1.1编程的流程一个编程的基本流程包括编辑、编译和连接三大步骤。
其流程图如图 1.1 所示。
编辑编辑a.cppb.cpp编译编译连接main.exe图 1.1 编程的基本流程1.2什么叫编辑编辑(edit)代码即编写代码,是编程的第一步。
你可以任意一个编辑器进行代码的编写。
你可以使用Windows 自带的“记事本”来编写代码,也可以使用Notepad++,或者 Visual Studio 提供的编辑器。
图 1.2 使用 Windows 自带的记事本编辑代码虽然可以使用记事本软件编辑代码,但是记事本软件的功能非常有限。
缺少常用的语法高亮,自动缩进等功能。
所以可以使用其他功能更丰富的编辑器,如Notepad++(图 1.3)等。
图 1.3 使用 Notepad++软件编辑代码1.3什么叫编译编译(compile)是将用某种编程语言(如 C++语言)写成的源代码,转换成目标文件。
目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据。
编译器(compiler)是实现这一目的的软件。
编译器有很多,如在 Windows 下有微软公司的 cl.exe,在 Linux 下有 gcc 和 g++。
在命令行下使用 cl.exe 对 hello.cpp 源代码进行编译,如图 1.4 所示。
编译后,将得到目标文件 hello.obj,如图 1.5 所示。
图 1.4 在命令行下使用 cl.exe 对 hello.cpp 进行编译图 1.5 编译后,将新生成 hello.obj 目标文件1.4什么叫连接连接(link)是将多个目标文件,以及库文件生成可执行的文件(或静态库、或动态库)的过程。
连接器(linker)是实现这一目的的软件。
常用的连接器有Windows 下的 link.exe,Linux 下的 ld 等。
在Windows 下可以使用 link.exe 将前面生成的 hello.obj 连接为可执行文件。
在命令行下效果如所图 1.6 示。
连接后,将生成可执行文件,如图 1.7 所示。
图 1.6 在命令行下使用 link.exe 对 hello.obj 进行连接图 1.7 连接后,将新生成 hello.exe 可执行文件1.5什么叫运行运行(run)较容易理解,我们在 Windows 资源管理器里用鼠标双击 exe 可执行程序,可以使程序被载入 CPU 运行。
我们也可以在命令行窗口中输入可执行程序的文件名运行,如图 1.8 所示。
图 1.8 在命令行窗口中运行 hello.exe,可以看到程序打印到标准输出的结果。
1.6Visual C++是什么通过前面的介绍,可以看到一个编程的流程:编辑->编译->连接->运行。
更具体来说,完成这个流程需要你:1.打开记事本软件,编辑代码,并保存;2.在命令行下运行编译器,对代码进行编译,生成目标文件;3.在命令行下运行连接器,将目标文件连接起来,生成可执行程序;4.在命令行下,或 Windows 资源管理器中运行程序,验证程序的正确性。
如果你的项目只有一个源代码文件,完成上面四个步骤尚可接受。
但是如果你的项目包括几十个甚至几百个源文件,如无其他软件辅助,只用上面四个非常基本的步骤进行编程开发,会让人抓狂。
集成开发环境(Integrated Development Environment,简称 IDE)可以帮助你对项目进行管理。
常用的 IDE 有微软公司的 Visual Studio,里面包含 Visual C++,Visual C#等,其他的还有 Eclipse、NetBeans、Delphi 等。
因此我们平时所说的 VC 不是一种编程语言,也不是编译器,它只是一个 IDE。
IDE 一般包含编辑器。
IDE 自带的编辑器一般都针对编程语言进行了定制,实现语法高亮、自动缩进、自动补全等方便的功能。
IDE 还提供丰富的菜单和按钮工具,如图 1.9、图 1.10 和图 1.11 所示。
如果你点击 IDE 中的“生成(build)”按钮(图 1.11),或者点击菜单“生成(build)”中的菜单项“生成项目(build project)”,那么IDE 会去调用编译器cl.exe 和连接器link.exe 来生成可执行程序。
如果你在调试状态下,还会去调用调试器(debugger)。
IDE 会提升程序开发的效率,特别是调试程序的效率。
图 1.9 微软 Visual Stdio 集成开发环境图 1.10 Visual Stdio 中的编辑按钮1.7头文件在编程过程中,程序代码往往被拆成很多部分,每部分放在一个独立的源文件中,而不是将所有的代码放在一个源文件中。
考虑一个简单的小例子:程序中有两个函数 main()和 foo()。
main()函数位于 main.cpp,foo()函数位于 foo.cpp,main()函数中调用foo()函数。
在编译阶段,由于编译是对单个文件进行编译,所以编译main.cpp 时,编译器不知道是否存在foo()函数以及foo()调用是否正确,因此需要头文件辅助。
也就是说,在编译命令:cl.exe /c main.cpp运行时,编译器不知道 foo 的用法是否正确(因为 foo 在另一个文件 foo.cpp 中),只有借助头文件中的函数声明来判断。
对 main.cpp 进行编译时,不会涉及foo.cpp 文件,只会涉及 main.cpp 和 foo.h(因为 foo.h 被 include)文件。
头文件的作用如图 1.1 所示。
1.foo() 函数这样用对main.cpp#include "foo.h"int main(){int i=foo(3,4);return i;}2.函数声明是int foo(int i, int j),你的调用看上去是对的。
foo.hint foo(int i, int j);foo.cpp#include "foo.h"int foo(int i, int j){……}图 1.12 对 main.cpp 进行编译时,需要利用头文件中的 foo()函数声明来确认 main.cpp 中对foo()的调用是正确的1.8库文件库文件中包含一系列的子程序。
例如在上一节的例子中,foo.cpp 源文件中实现了 foo()函数,我们假设 foo()函数是包含重要算法的函数,我们需要将 foo() 函数提供给客户使用,但是不希望客户看到算法源代码。