搜档网
当前位置:搜档网 › Opencv的基本操作

Opencv的基本操作

Opencv的基本操作
Opencv的基本操作

实验六 OPENCV的基本操作

张慧彬

2013-8-24

机器人研究中心

目录

一.OPENCV的基本算法及一般应用 (2)

1.从磁盘加载并在屏幕上显示图象 (2)

2.播放AVI视频 (3)

3.视频播放控制 (4)

4.载入一幅图象并进行平滑处理 (6)

二.调试OPTICAL_FLOW_DEMO.CPP程序 (7)

三.OENCV的应用之CANNY边缘检测 (8)

1. C ANNY边缘检测基本原理 (8)

2.C ANNY边缘检测流程 (8)

四.试验总结及心得 (12)

一. Opencv的基本算法及一般应用

1.从磁盘加载并在屏幕上显示图象

#include”highgui.h”

int main(int argc,char** argv);

{

IplImage *img=cvLoadImage(agrv[1]); //将图像文件加载至内存,cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载文件的格式,。IplImage结构体将是我们在使用OpenCV时会最常用到的数据结构

cvNamedWindow(”Example 1”,CV_WINDOW_AUTOSIZE); // cvNamedWindow()函数用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。函数的第一个参数指定了该窗口的窗口标题,cvNamedWindow()函数的第二个参数定义了窗口的属性。该参数可被设置为0(默认值)或CV_WINDOW_AUTOSIZE,设置为0时,窗口的大小不会因图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放;而设置为

CV_WINDOW_AUTOSIZE时,窗口则会根据图像的实际大小自动进行拉伸或缩放,以容纳图像

cvShowImage(”Example 1”,img);// 只要有一个与某个图像文件相对应的IplImage*类型的指针,我们就可以在一个已创建好的窗口(使用cvNamedWindow()函数创建)中使用cvShowImage()函数显示该图像。cvShowImage()函数通过设置其第一个参数确定在哪个已存在的窗口中显示图像。cvShowImage()函数被调用时,该窗口将被重新绘制,并且图像也会显示在窗口中。如果该窗口在创建时被指定CV_WINDOW_AUTOSIZE标志作为cvNamedWindow()函数的第二个参数,该窗口将根据图像的大小自动调整为与图像一致。

cvWaitKey(0);// 使程序暂停,等待用户触发一个按键操作。但如果将该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。当设置该函数参数为0或负数时,程序将一直等待用户触发按键操作。

cvReleaseImage(&img);// 通过为cvReleaseImage()函数传递一个类型为IplImage*的指针参数调用该函数,用以执行内存释放操作。对cvReleaseImage()函数的调用执行完毕后,img指针将被设置为NULL

cvDestroyWindow(“Example 1”);// cvDestroyWindow()函数将关闭窗口,并同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区,该缓冲区中保存了与img指针相关的图像文件像素信息的一个副本)

}

2. 播放AVI视频

#include”highgui.h”

int main(int argc,char **argv)

{

cvNamedWindow(“Example 2”,CV_WINDOW_AUTOSIZE);

CvCapture *capture=cvCreatFileCapture (argv[1]); // 函数cvCreateFileCapture()通过参数设置确定要读入的AVI文件,返回一个指向CvCapture结构的指针。这个结构包括了所有关于要读入AVI文件的信息,其中包含状态信息。在调用这个函数后,返回指针所指向的CvCapture结构被初始化到所对应AVI 文件的开头。

IplImage *frame;

While(1)

{ frame=cvQueryFrame(capture);// 一旦进入while(1)循环,我们便开始读入AVI文件,cvQueryFrame的参数为CvCapture结构的指针。用来将下一帧视频文件载入内存(实际是填充或更新CvCapture结构中)。返回一个对应当前帧的指针

If(!frame) break;

cvShowImage(“Example 2”,frame);

char c=cvWaitKey(33);

if (c==27) break;

}

cvReleaseCapture(&capture);// 退出循环体(视频文件已经读入结束或者用户触发了Esc键)后,我们应该释放为CvCapture结构开辟的内存空间,这同时也会关闭所有打

开的AVI文件相关的文件句柄。

cvDestroyWindow(“Example 2”);

}

3. 视频播放控制

滚动条可以使我们方便地从视频的一帧跳到另外一帧。我们通过调用cvCreateTrackbar()来创建一个滚动条,并且通过设置参数确定滚动条所属于的窗口。为了获得所需的功能,只需要提供一个回调函数。

拖动滚动条,函数onTrackSlide()便被调用并被传入滚动条新的状态值.

从本质上说,这种方法是通过添加一个全局变量来表示滚动条位置并且添加一个回调

函数更新变量以及重新设置视频读入位置。我们通过一个调用来创建滚动条和确定回

调函数

#include”cv.h”

#include”highgui.h”

int g_slider_position=0;

CvCapture *capture=NULL;//首先为滚动条位置定义一个全局变量。由于回调函数需

要使用CvCapture对象,因此我们将它定义为全局变量

void onTrackbarSlide(int pos)

{ cvSetCaptureProperty

( g_capture,

CV_CAP_PROP_POS_FRAMES,

pos);

} //现在我们定义一个回调函数,使其在滚动条被拖动时调用。滚动条的位置会被作

为一个32位整数以参数形式传入。

后面我们会常常看到函数cvSetCaptureProperty()被调用,同时与之配套的函数cvGetCaptureProperty()也经常会被调用。这些函数允许我们设置(或查询)CvCapture

对象的各种属性。在本程序中我们设置参数CV_CAP_PROP_POS_ FRAMES(这个参数表示

我们以帧数来设置读入位置,如果我们想通过视频长度比例来设置读入位置,我们可

以通过用AVI_RATIO代替FRAMES来实现)。最后,我们把新的滚动条位置作为参数传

int main(int argc,char**argv)

{ cvNamedWindow(“Example 3”,CV_WINDOW_AUTOSIZE);

g_capture=cvCreatFileCapture(argv[1]);

int frames=(int) cvGetCaptureProperty

( g_capture,

CV_CAP_PROP_FRAME_COUNT);// 当需要从CvCapture结构查询数据时,可使用cvGetCaptureProperty函数

if(frames!=0)

{ cvCreateTrackbar

( “position”,

“Example 3”,

&g_slider_position,

frames,

onTrackbarSlide);

}//前面的代码用来创建滚动条,借助函数cvCreateTrackbar(),我们可设置滚动条的名称并确定滚动条的所属窗口。我们将一个变量绑定到这个滚动条来表示滚动条的最

大值和一个回调函数(不需要回调函数时置为空,当滚动条被拖动时触发)。仔细分析,你会发现一点:cvGetCaptureProperty()返回的帧数为0时,滚动条不会被创建。这

是因为对于有些编码方式,总的帧数获取不到,在这种情况下,我们只能直接播放视

频文件而看不到滚动条

IplImage*frame;

// While loop (as in Example 2) capture & show video

// Release memory and destroy window

return(0);

}

4. 载入一幅图象并进行平滑处理

.#include”cv.h”

#include”highgui.h”

void example2_4(IplImage *image)

{ cvNamedWindow(“example4-in”);

cvNamedWindow(“example4-out”); //creat some windows to show the input and output images in

cvShowImage(“example4-in”,image);//show our input image

IplImage*out=cvCreatImage(cvGetSize(image),IPL_DEPTH_8U,3);

//creat an image to hold the smooth output 。第一个参数是一个CvSize结构,这个结构可以通过cvGetSize(image)方便地获得;第一个参数说明了当前图像结构的大小。第二个参数告诉了我们各通道每个像素点的数据类型,最后一个参数说明了通道的总数。所以从程序中可以看出,当前图像是3个通道(每个通道8位),图像大小同image。

cvSmooth(image,out,CV_GAUSSIAN,3,3);//do the smooth 我们通过使用每个像素周围3*3区域进行高斯平滑处理

cvShowImage(“example4-out”,out);//show the smoothed image in the output window

cvReleaseImage(&out);//be tidy 现在我们可以在我们新窗口中显示处理后的图像然后释放它:cvReleaseImage()通过给定一个指向IplImage*的指针来释放与图像对应的内存空间。

cvWaitKey(0);//wait for the user to hit a key ,then clean up the windows

cvDestroyWindow(“example4-in”);

cvDestroyWindow(“example4-out”);

}

二.调试optical_flow_demo.cpp程序

此程序是稀疏光流演示程序,对物体进行视频跟踪处理,在代码中可以看出这是只是一个内联图像分配。实际计算机视觉算法代码。基本上它分配请求的图像,除非该图像已非空。它总是让一个非空图像原有甚至如果图像的大小、深度、和/或渠道是不同的请求。创建一个对象,输入视频流解码,读取帧数的大小对物体进行跟踪。

在将所给的程序添加到源文件中,对自己的AVI视频的路径进行设置。最后运行结果如下:

图1

按键盘上的“K”或“L”键可以将视频快进,按“B”键可以后退,很明显可以看出这个物体跟踪的效果。

图2

图3

三. Oencv的应用之Canny边缘检测

1.Canny边缘检测基本原理

检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。图像

边缘检测必须满足两个条件:一是必须能有效地抑制噪声;二是必须尽量精确确定边

缘的位置。但在提高边缘检测算子对边缘的敏感性的同时也提高了对噪声的敏感。

(1)具有既能滤去噪声又保持边缘特性的边缘检测最优滤波器,其采用一阶微分滤波器。采用二维高斯函数的任意方向上的一阶方向导数为噪声滤波器,通过与图像卷积进行

滤波;然后对滤波后的图像寻找图像梯度的局部最大值,以此来确定图像边缘。根据

对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。(2)类似与Marr(LOG)边缘检测方法,也属于先平滑后求导数的方法。

2.Canny边缘检测流程

(1)首先用2D高斯滤波模板与原始图像进行卷积,以消除噪声;

(2)用一阶偏导的有限差分来计算梯度的幅值和方向;

(3)对梯度幅值进行非极大值抑制;

(4)用双阈值算法检测和连接边缘。

Canny算子边缘检测的方法是寻找图像梯度的局部最大值。梯度是用高斯滤波器的导数计算的。Canny方法使用两个阈值来分别检测强边缘和弱边缘,而且仅当强边缘和弱边缘相连时,弱边缘才会包含在输出中。因此,此方法不容易受噪声的干扰,能够

检测到真正的弱边缘。以下是我们进行Canny边缘检测的代码:

#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

#include

#include

using namespace std;

void fun1()// * cvCanny:Canny边缘检测

{

//声明IplImage指针

IplImage* pImg = NULL;

IplImage* pCannyImg = NULL;

//载入图像,强制转化为Gray

pImg = cvLoadImage("F:\\lena.jpg", 0);

if(!pImg)

fprintf(stderr,"Can not open image file\n");

else{

//为canny边缘图像申请空间

pCannyImg = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);

//canny边缘检测

cvCanny(pImg, pCannyImg, 50, 150, 3);

//创建窗口

cvNamedWindow("src", 1);

cvNamedWindow("canny",1);

//显示图像

cvShowImage( "src", pImg );

cvShowImage( "canny", pCannyImg );

cvWaitKey(0); //等待按键

//销毁窗口

cvDestroyWindow( "src" );

cvDestroyWindow( "canny" );

//释放图像

cvReleaseImage( &pImg );

cvReleaseImage( &pCannyImg );

}

return;

}

int _tmain(int argc, _TCHAR* argv[])

{

int choose=-1;

while(choose)

{

cout<<"请选择要进行的图像操作:\n";

cout<<"1.start(开始Canny边缘检测) 2.quit(退出Canny边缘检测)\n";

cin>>choose;

switch(choose)

{

case 1:fun1();break;

case 2:choose=0;break;

default: break;

}

}

getchar();

return 0;

}

运行结果为

图4 Canny边缘检测之后:

图5

四.试验总结及心得

本次实验中对opencv进行了充分的了解,并利用opencv进行了运动物体跟踪监测的程序编译,初步了解了该视频处理环境的具体功能以及调用方法,并了解了视频跟踪中所涉及的一些算法以及图像处理的技巧,通过本次实验基本掌握了图像跟踪各模块的具体应用方式,在实验过程中加深了VS2008及opencv的理解,总体来说收获颇多。

Opencv文件操作与数据存储

数据存储 OpenCV提供了一种机制来序列化(serialize)和去序列化(de-serialize)其各种数据类型,可以从磁盘中按YAML或XML格式读/写。在第4章中,我们将专门介绍存储和调用常见的对象IplImages的函数(cvSaveImage()和cvLoadImage())。此外,第4章将讨论读/写视频的特有函数:可以从文件或者摄影机中读取数据的函数cvGrabFrame()以及写操作函数cvCreateVideoWriter()和cvWriteFrame()。本小节将侧重于一般对象的永久存储:读/写矩阵、OpenCV结构、配置与日志文件。 首先,我们从有效且简便的OpenCV矩阵的保存和读取功能函数开始。函数是cvSave()和cvLoad()。例3-15展示了如何保存和读取一个5×5的单位矩阵(对角线上是1,其余地方都是0)。 例3-15:存储和读取CvMat 1.CvMat A= cvMat( 5, 5, CV_32F, the_matrix_data ); 2. 3.cvSave( "my_matrix.xml", &A ); 4.. . . 5.// to load it then in some other program use … 6.CvMat* A1= (CvMat*) cvLoad( "my_matrix.xml" ); CxCore参考手册中有整节内容都在讨论数据存储。首先要知道,在OpenCV中,一般的数据存储要先创建一个CvFileStorage结构(如例3-16)所示,该结构将内存对象存储在一个树形结构中。然后通过使用 CV_STORAGE_READ参数的cvOpenFileStorage()从磁盘读取数据,创建填充该结构,也可以通过使用 CV_STORAGE_WRITE的cvOpenFileStorage()创建并打开CvFileStorage写数据,而后使用适当的数据存储函数来填充它。在磁盘上,数据的存储格式为XML或者YAML。 例3-16:CvFileStorage结构,数据通过CxCore数据存储函数访问 1.typedef struct CvFileStorage 2.{ 3.... // hidden fields 4.} CvFileStorage; CvFileStorage树内部的数据是一个层次化的数据集合,包括标量、CxCore对象(矩阵、序列和图)以及用户定义的对象。 假如有一个配置文件或日志文件。配置文件告诉我们视频有多少帧(10),画面大小(320×240)并且将应用一个3×3的色彩转换矩阵。例3-17展示了如何从磁盘中调出cfg.xml文件。 例3-17:往磁盘上写一个配置文件cfg.xml 1.CvFileStorage* fs= cvOpenFileStorage( 2."cfg.xml", 3.0, 4.CV_STORAGE_WRITE 5.); 6.cvWriteInt( fs, "frame_count", 10 ); 7.cvStartWriteStruct( fs, "frame_size", CV_NODE_SEQ ); 8.cvWriteInt( fs, 0, 320 ); 9.cvWriteInt( fs, 0, 200 ); 10.cvEndWriteStruct(fs); 11.cvWrite( fs, "color_cvt_matrix", cmatrix );

树莓派安装opencv

树莓派学习笔记——apt方式安装opencv 0.前言 本文介绍如何在树莓派中通过apt方式安装opencv,并通过一个简单的例子说明如何使用opencv。相比于源代码方式安装opencv,通过apt方式安装过程步骤简单些,消耗的时间也少一些。通过apt方式安装没有自动生成opencv.pc文件,所以在编写makefile文件时不能直接使用pkg-config工具,而需要逐个指定opencv_core、opencv_imgproc 等动态链接库。 【相关博文】 【树莓派学习笔记——源代码方式安装opencv】 更多内容请参考——【树莓派学习笔记——索引博文】 1.安装opencv 开始之前进行必要的更新工作。 sudo apt-get update 安装opencv。 sudo apt-get install libcv-dev 安装过程比较缓慢,请耐心等待。 安装完成之后,opencv相关的头文件被安装到/usr/lib目录中,该目录是linux默认头文件查找路径。opencv的相关动态链接库被安装到/usr/lib目录中。这些动态链接库包括: 【opencv_calib3d】——相机校准和三维重建

【opencv_core】——核心模块,绘图和其他辅助功能 【opencv_features2d】——二维特征检测 【opencv_flann】——快速最邻近搜索 【opencv_highgui】——GUI用户界面 【opencv_imgproc】——图像处理 【opencv_legacy】——废弃部分 【opencv_ml】——机器学习模块 【opencv_objdetect】——目标检测模块 【opencv_ocl】——运用OpenCL加速的计算机视觉组件模块【opencv_video】——视频分析组件 2.简单示例 【C++】——通过代码载入一张图片,通过opencv把彩色图片转换为黑白图片,并把原图和转换后的图片输出到屏幕中。 [cpp]view plaincopy 1.#include 2.#include 3.#include 4.#include https://www.sodocs.net/doc/6714991149.html,ing namespace cv; https://www.sodocs.net/doc/6714991149.html,ing namespace std; 7.int main (int argc, char **argv) 8.{ 9. Mat image, image_gray; 10. image = imread(argv[1], CV_LOAD_IMAGE_COLOR ); 11.if (argc != 2 || !image.data) { 12. cout << "No image data\n"; 13.return -1; 14. } 15.

OpenCV主要函数介绍

4.1 OpenCV主要函数介绍 1) cvLoadImage 从文件中读取图像 IplImage* cvLoadImage(const char* filename,int flags=CV_LOAD_IMAGE_COLOR ); 函数cvLoadImage从指定文件读入图像,返回读入图像的指针。其中filename是要被读入的文件的文件名;flags指定读入图像的颜色和深度。 2)cvSaveImage 保存图像到文件 int cvSaveImage( const char* filename, const CvArr* image ); 函数cvSaveImage保存图像到指定文件。其中filename保存文件名。image 要保存的图像。图像格式的的选择依赖于filename的扩展名,只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。 3)cvQueryFrame从摄像头或者文件中抓取并返回一帧 IplImage* cvQueryFrame( CvCapture* capture ); 函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。其中capture视频获取结构。。 4)cvCaptureFromCAM 初始化摄像头 CvCapture* cvCaptureFromCAM( int index ); 函数cvCaptureFromCAM给从摄像头的视频流分配和初始化CvCapture结构。 其中index要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。 5)cvHaarDetectObjects 用来检测图像中的人脸区域 CV API(CvSeq*) cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1), int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0))); 用于快速检测人脸区域,便于提取得到人脸数据。其中image 为被检图像,cascade为 haar分类器级联的内部标识形式,storage 为用来存储检测到的一

配置OpenCV+VS

配置OpenCV2.4.10 + Visual Studio 2010 一、安装OpenCV 1、双击OpenCV安装包,会提示解压到某个地方,推荐放到D:\Program Files\下,比如安装路径就写:D:\Program Files。 2、等一段时间,OpenCV2.4.10近3个多G的文件就解压到了D:\Program Files 下。其中,build里面是使用OpenCV2.4.10相关的文件,我们如果只是使用OpenCV2.4.10的话呢,就只用管build里面的内容。 二、安装Visual Studio 2010 1、右击Visual Studio 2010的压缩包,解压文件。在解压后的文件中找到autorun 应用程序, 2、点开autorun,弹出一下对话框,点击对话框中的“安装Microsoft Visual Studio

2010”. 3、如图所示下一步: 4、选中我已阅读许可条款,点击下一步

5、根据需要选择功能,安装路径,点击安装 6、几分钟之后,出现如图需要重新启动才能完成安装。大家记得保存好已打开的其他文件再重启。

7、电脑重启之后,安装程序自动出现,耐心等待安装。

8、四十分钟后,安装完成。 9、最后还会跳出这么一个对话框,直接点退出就可以了。到此,软件安装过程全部结束。成功了。打开软件就可以用了。

三、配置OpenCV2.4.10 和 Visual studio 2010 3.1、配置环境变量 3.1.1、【计算机】->【(右键)属性】->【高级系统设置】->【高级(标签)】->【环境变量】->“双击”系统变量中的PATH->在变量值里面添加相应的路径。如图:

opencv编写笔记

建工程步骤省略!!!!!! 1、项目—demo(自己取项目名称)属性---配置属性—VC++目录—包含目录:D:\opencv\opencv\build\include;) 2、配置属性—VC++目录—库目录:D:\opencv\opencv\build\x86\vc10\lib 3、链接器—输入—附加依赖项—添加一下这些(针对Debug调试): opencv_ml2410d.lib opencv_calib3d2410d.lib opencv_contrib2410d.lib opencv_core2410d.lib opencv_features2d2410d.lib

opencv_flann2410d.lib opencv_gpu2410d.lib opencv_highgui2410d.lib opencv_imgproc2410d.lib opencv_legacy2410d.lib opencv_objdetect2410d.lib opencv_ts2410d.lib opencv_video2410d.lib opencv_nonfree2410d.lib opencv_ocl2410d.lib opencv_photo2410d.lib opencv_stitching2410d.lib opencv_superres2410d.lib opencv_videostab2410d.lib ◆按F5运行,若出现这样的情况:无法找到系统文件,缺少…..demo.exe程序。则需 下载tbb41_20130314oss_win.zip ,将其解压后文件夹中包含的bin文件夹, 复制到D:\opencv\opencv\build\common\tbb里;若还不行,可关掉当前文件,重新建立新项目,再进行配置! ◆完成以后,计算机属性---高级系统设置—环境变量---选择path—双击—添加路径: D:\opencv\opencv\build\x86\vc10\bin;D:\opencv\opencv\build\common\tbb\ia32\vc 10

OPENCV函数

Opencv函数 分配图像空间: IplImage*cvCreateImage(CvSize size,int depth,int channels); size:cvSize(width,height); depth:IPL_DEPTH_8U,IPL_DEPTH_8S,IPL_DEPTH_16U, IPL_DEPTH_16S,IPL_DEPTH_32S,IPL_DEPTH_32F, IPL_DEPTH_64F channels:1,2,3or4. 注意数据为交叉存取.彩色图像的数据编排为b0g0r0b1g1 r1... 举例: //分配一个单通道字节图像 IplImage*img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); //分配一个三通道浮点图像 IplImage*img2=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); 释放图像空间: IplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); cvReleaseImage(&img); 复制图像: IplImage*img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); IplImage*img2; img2=cvCloneImage(img1); 设定/获取兴趣区域: void cvSetImageROI(IplImage*image,CvRect rect); void cvResetImageROI(IplImage*image); vRect cvGetImageROI(const IplImage*image); 大部分OpenCV函数都支持ROI. 设定/获取兴趣通道: void cvSetImageCOI(IplImage*image,int coi);//0=all int cvGetImageCOI(const IplImage*image); 大部分OpenCV函数暂不支持COI.

VS2013 中OpenCV2410 的配置及其他

1 2

Include Directories: C:\opencv\build\include Library Directories: C:\opencv\build\x86\vc12\lib 3 opencv_calib3d2410d.lib opencv_contrib2410d.lib opencv_core2410d.lib opencv_features2d2410d.lib opencv_flann2410d.lib opencv_gpu2410d.lib

opencv_imgproc2410d.lib opencv_legacy2410d.lib opencv_ml2410d.lib opencv_nonfree2410d.lib opencv_objdetect2410d.lib opencv_ocl2410d.lib opencv_photo2410d.lib opencv_stitching2410d.lib opencv_superres2410d.lib opencv_ts2410d.lib opencv_video2410d.lib opencv_videostab2410d.lib opencv_calib3d2410.lib opencv_contrib2410.lib opencv_core2410.lib opencv_features2d2410.lib opencv_flann2410.lib opencv_gpu2410.lib opencv_highgui2410.lib opencv_imgproc2410.lib opencv_legacy2410.lib opencv_ml2410.lib opencv_nonfree2410.lib opencv_objdetect2410.lib opencv_ocl2410.lib opencv_photo2410.lib

OPenCV3.2中Mat对象常用函数属性总结

OPenCV3.2中Mat对象常用函数属性总结Mat对象是OpenCV2.0之后引进的图像数据结构,它能自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分。 在使用Mat对象时,有以下四个要点需要注意: 1、输出图像的内存是自动分配的 2、使用OpenCV的C++接口,不需要考虑内存分配问题 3、赋值操作和拷贝构造函数只会复制头部分 4、使用clone与copyTo两个函数实现数据完全复制 下面我们就具体介绍一下公共成员函数和公共属性。 公共成员函数: 1、cv::Mat::Mat ( int rows, int cols, int type ) 参数: rows2D数组中的行数 cols2D数组中的列数。 type数组类型。使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

2、cv::Mat::Mat ( Size size, int type ) 参数: size 2D数组大小:Size(cols, rows)。在Size()构造函数中,行数和列数以相反的顺序排列。 type 数组类型。使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。 3、cv::Mat::Mat ( int rows, int cols, int type, const Scalar & s ) 参数: rows2D数组中的行数。 cols 2D数组中的列数。 type数组类型。使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。s 初始化每个矩阵元素的可选值。在构建后将所有矩阵元素设置为特定值, 使用赋值运算符Mat::operator=(const Scalar& value) 。 4、cv::Mat::Mat ( Size size, int type,

Visual Studio2012环境下配置OpenCV_v2.4.10的步骤

Visual Studio2012环境下配置OpenCV的步骤 2014/12/16 本文将针对Visual Studio2012环境下如何配置OpenCV做出说明,具体如下。 1.下载和安装OpenCV SDK 1.1资源下载 在OpenCV官网https://www.sodocs.net/doc/6714991149.html, SDK安装包。对应自己的操作系统,可以下载Windows,Linux/Mac和ios版本。目前官网已经给出OpenCV v3.0bata版本。本文中以OpenCV v2.4.10版本为例进行安装。(各个版本安装过程大体相同,后面将针对不同之处给出说明) 1.2资源安装 下载的OpenCV SDK的后缀名为exe,是一个解压安装程序。双击后会提示设置解压路径,推荐路径D:\Program Files。(因为OpenCV项目文件打包的时候,根目录就是opencv,所以我们不需要额外的新建一个名为opencv的文件夹然后再解压,那是多此一举的事情)然后点击Extract按钮,进行安装。 2.环境变量和路径设置 打开计算机→属性→高级系统设置,在高级目录下单击环境变量按钮,打开环境变量设置对话框。

2.1用户变量设置 在用户变量(此处为lbs的用户变量中)添加两个变量。 新建opencv变量,变量值设置为D:\Program Files\opencv\build。 新建path变量,变量值设置为D:\Program Files\opencv\build\x86\vc11\bin。此处如果已存在path变量,仅需对其变量值修改就行,在后面加上上述路径,但需要用分号和前面的路径隔开(英文半角下的分号) 2.2系统变量设置 在原有的path变量中对变量值修改,在变量值的最后加上D:\Program Files\opencv\build\x86\vc11\bin路径,注意要使用英文半角下的分号和前面的路径隔开。 ※说明 (1)不论电脑是32位还是64位,上述路径中均以x86路径输入,因为创建的程序中默认是在使用win32编译器进行编译。 (2)路径修改后需要重启电脑才能生效。 3.工程项目属性设置 工程项目属性配置主要是指对Debug和Release环境下的工程属性进行修改(通过修改https://www.sodocs.net/doc/6714991149.html,er文件进行)。查阅相关资料,发现Visual Studio 2012中已经不再区分Debug和Release的https://www.sodocs.net/doc/6714991149.html,er文件,所以配置了Debug或Release中的任

OPENCV_Mat类存取方法(元素访问)

Opencv ----Mat类 ?cv::Mat ?depth/dims/channels/step/data/elemSize Mat矩阵中数据元素的地址计算公式: addr(M i0,i1,…i m-1) = M.data + M.step[0] * i0 + M.step[1] * i1+ … + M.step[m-1] * i m-1。其中m = M.dims 是指M的维度 i.data:Mat对象中的一个指针,指向内存中存放矩阵数据的一块内存(uchar* data). ii.row: 行;col:列;rows:行数;cols:列数。 iii.dims :Mat所代表的矩阵的维度,如3 * 4 的矩阵为2 维,3 * 4 * 5 的为3维. iv.channels:通道,矩阵中的每一个矩阵元素拥有的值的个数,比如说3 * 4 矩阵中一共12 个元素,如果每个元素有三个值,那么就说这个矩阵是3 通道的,即channels = 3。常见的是一张彩色图片有红、绿、蓝三个通道。但是opencv用imread(opencv读图的函数)读进来的图像,三通道存放顺序为B、 G、R。 v.depth:深度,即每一个像素的位数(bits),在opencv的Mat.depth()中得到的是一个0 –6 的数字,分别代表不同的位数:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };可见0和1都代表8位,2和3都代表16位,4和5代表32位,6代表64位; vi.step:是一个数组,定义了矩阵的布局,具体见下面图片分析,另外注意step1

opencvVS使用说明

1.打开opencv2.4.9.exe,指定安装位置(文件解压位置),解压后包含两个文件夹build、source,build文件夹中包含静态链接库文件和动态链接库文件,source文件夹包含opencv函数的源码以及训练好的分类器以及训练好的分类器。 (1)提取build文件夹下include文件夹备用(第12步使用); (2)提取build/x86/vc10目录下的bin文件夹、lib文件夹备用。(说明:x86文件夹中链接库文件是VS默认win32平台 下32位编译器,如果设置VS编译平台为64位则需要x64 文件夹的链接库;vc10文件夹的链接库对应VS2010开发平 台,vc11未知,vc12对应VS2012及以上的开发平台) 图1 opencv解压得到的两个文件夹图2 build文件夹include 图3 build/x86/vc10文件夹下bin、lib分别存放动态静态链接库文件

图4 source文件夹中data文件夹中的haarlike级联分类器、hog分类器、lbp分类器,主要对人脸、五官、微笑、行人等做分类检测 2.打开VS,新建一个Win32控制台应用程序 3.点击下一步然后去掉预编译头,选择空项目

4.点击完成,找到解决方案管理器,右键工程名

5.配置属性->VC++目录 6.在可执行文件目录编辑输入../bin 然后点击确定

7.在包含目录分别输入../include ../include/opencv ../inclide/opencv2 然后点击确定 8.在库目录输入../lib 然后点击确定

opencv矩阵操作学习资料

o p e n c v矩阵操作

通用矩阵乘法 void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, double beta, CvArr* dst, int tABC=0 ); #define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( src1, src2, 1, src3, 1, dst, 0 ) #define cvMatMul( src1, src2, dst ) cvMatMulAdd( src1, src2, 0, dst ) src1 第一输入数组 src2 第二输入数组 src3 第三输入数组 (偏移量),如果没有偏移量,可以为空( NULL)。 dst 输出数组 tABC T操作标志,可以是 0 或者下面列举的值的组合: CV_GEMM_A_T - 转置 src1 CV_GEMM_B_T - 转置 src2 CV_GEMM_C_T - 转置 src3 例如, CV_GEMM_A_T+CV_GEMM_C_T 对应 alpha*src1T*src2 + beta*src3T 函数 cvGEMM 执行通用矩阵乘法: dst = alpha*op(src1)*op(src2) + beta*op(src3), 这里 op(X) 是 X 或者 XT

所有的矩阵应该有相同的数据类型和协调的矩阵大小。支持实数浮点矩阵或者 复数浮点矩阵。 [编辑] Transform 对数组每一个元素执行矩阵变换 void cvTransform( const CvArr* src, CvArr* dst, const CvMat* transmat, const CvMat* shiftvec=NULL ); src 输入数组 dst 输出数组 transmat 变换矩阵 shiftvec 可选偏移向量 函数 cvTransform 对数组 src 每一个元素执行矩阵变换并将结果存储到 dst: dst(I)=transmat*src(I) + shiftvec 或者 dst(I)k=sumj(transmat(k,j)*src(I)j) + shiftvec(k) N-通道数组 src 的每一个元素都被视为一个N元向量,使用一个M×N 的变换矩阵 transmat 和偏移向量 shiftvec 把它变换到一个 M-通道的数组 dst 的 一个元素中。这里可以选择将偏移向量 shiftvec 嵌入到 transmat 中。这样

OpenCV 说明介绍

OpenCV3.0 Overview Gary Bradski Chief Scientist, Perception and AI at Magic Leap CEO, https://www.sodocs.net/doc/6714991149.html, Vadim Pisarevsky Principal Engineer, Itseez Grace Vesom Senior Engineer in 3D at Magic Leap Vincent Rabaud Perception Team Manager at Aldebaran Robotics

OpenCV at glance ?BSD license, 10M downloads, 500K+lines of code ?Huge community involvement, automated patch testing and integration process ?Runs everywhere Bindings: Python, Samples, Apps, SSE, NEON, IPP, OpenCL, CUDA, OpenCV4Tegra, … core, imgproc, objdetect … OpenCV HAL OpenCV face, text, rgbd, … OpenCV Contrib Java Solutions ?Find more at https://www.sodocs.net/doc/6714991149.html,(user) ?Or https://www.sodocs.net/doc/6714991149.html,(developer)

Recent Stats > 10M downloads NOTE: This is only for source forge. Many more downloads come from Git and many more come on Unix distros. ~200K downloads/month World wide Rated highly

opencv矩阵操作

通用矩阵乘法 void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, double beta, CvArr* dst, int tABC=0 ); #define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( src1, src2, 1, src3, 1, dst, 0 ) #define cvMatMul( src1, src2, dst ) cvMatMulAdd( src1, src2, 0, dst ) src1 第一输入数组 src2 第二输入数组 src3 第三输入数组 (偏移量),如果没有偏移量,可以为空( NULL)。 dst 输出数组 tABC T操作标志,可以是 0 或者下面列举的值的组合: CV_GEMM_A_T - 转置 src1 CV_GEMM_B_T - 转置 src2 CV_GEMM_C_T - 转置 src3 例如, CV_GEMM_A_T+CV_GEMM_C_T 对应 alpha*src1T*src2 + beta*src3T 函数 cvGEMM 执行通用矩阵乘法: dst = alpha*op(src1)*op(src2) + beta*op(src3), 这里 op(X) 是 X 或者 XT

所有的矩阵应该有相同的数据类型和协调的矩阵大小。支持实数浮点矩阵或者复数浮点矩阵。 [编辑] Transform 对数组每一个元素执行矩阵变换 void cvTransform( const CvArr* src, CvArr* dst, const CvMat* transmat, const CvMat* shiftvec=NULL ); src 输入数组 dst 输出数组 transmat 变换矩阵 shiftvec 可选偏移向量 函数 cvTransform 对数组 src 每一个元素执行矩阵变换并将结果存储到 dst: dst(I)=transmat*src(I) + shiftvec 或者 dst(I)k=sumj(transmat(k,j)*src(I)j) + shiftvec(k) N-通道数组 src 的每一个元素都被视为一个N元向量,使用一个M×N 的变换矩阵 transmat 和偏移向量 shiftvec 把它变换到一个 M-通道的数组 dst 的

opencv2.4.9在Hi3531开发板上移植

opencv2.4.9下载不用说了。 Ubuntu12.04虚拟机安装的+arm-hisiv200-linux交叉编译器+cmake-gui(2.8.7) 参考:https://www.sodocs.net/doc/6714991149.html,/luotuo44/article/details/8958990 https://www.sodocs.net/doc/6714991149.html,/s/blog_92942dba0101d1wj.html 一、建立编译环境配置 进入opencv-2.4.9目录建立release-hisiv200目录存放编译过程中文件。 #cd opencv-2.4.9 #mkdir release-hisiv200 #cd release-hisiv200 打开cmake-gui,进行博客中的配置:#cmake-gui 在configure时选择CMAKE_SYSTEM_NAME:arm-hisiv200-linux C:选择/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc C++:选择/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-g++ 修改安装目录:CMAKE_INSTALL_PREFIX:/opt/2.4.9-arm-hisiv200 进行编译:make 二、出现问题: 1、/usr/lib/libImath.so: could not read symbols: File in wrong format

collect2: ld returned 1 exit status make[2]: *** [lib/libopencv_highgui.so] 错误1 make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] 错误2 make: *** [all] 错误2 主要opencv编译OPENEXR时要用到libImath.so,所有我就把那个取消了,然后编译就没出现过这个问题。 蓝色的部分不要选,还有下面这个也别选: 蓝色的部分不要选,还有下面这个也别选:

Opencv中函数的用法

1、cvLoadImage:将图像文件加载至内存; 2、cvNamedWindow:在屏幕上创建一个窗口; 3、cvShowImage:在一个已创建好的窗口中显示图像; 4、cvWaitKey:使程序暂停,等待用户触发一个按键操作; 5、cvReleaseImage:释放图像文件所分配的内存; 6、cvDestroyWindow:销毁显示图像文件的窗口; 7、cvCreateFileCapture:通过参数设置确定要读入的AVI文件; 8、cvQueryFrame:用来将下一帧视频文件载入内存; 9、cvReleaseCapture:释放CvCapture结构开辟的内存空间; 10、cvCreateTrackbar:创建一个滚动条; 11、cvSetCaptureProperty:设置CvCapture对象的各种属性; 12、cvGetCaptureProperty:查询CvCapture对象的各种属性; 13、cvGetSize:当前图像结构的大小; 14、cvSmooth:对图像进行平滑处理; 15、cvPyrDown:图像金字塔,降采样,图像缩小为原来四分之一; 16、cvCanny:Canny边缘检测; 17、cvCreateCameraCapture:从摄像设备中读入数据; 18、cvCreateVideoWriter:创建一个写入设备以便逐帧将视频流写入视频文件;搜索 19、cvWriteFrame:逐帧将视频流写入文件; 20、cvReleaseVideoWriter:释放CvVideoWriter结构开辟的内存空间; 21、CV_MAT_ELEM:从矩阵中得到一个元素; 22、cvAbs:计算数组中所有元素的绝对值;

opencv2.4.9配置

Visual Studio 2010配置 Opencv2.4.9 转自: https://www.sodocs.net/doc/6714991149.html,/huang9012/article/details/21811129 这篇文章作为OpenCV的启程篇,自然少不了先系统地介绍OpenCV开发环境的配置。 浅墨前后经历过OpenCV 2.4.6,OpenCV 2.4.7,OpenCV 2.4.8这三个版本的配置,有时候还要涉及到三个版本之间的转换,所以还是对OpenCV的配置有一定的理解的,希望自己的一点拙见能帮到大家。 还是先放出待会儿的测试用图:

1.下载和安装OpenCV SDK VS2010不用说,肯定都安装了吧。来说说当前最新的OpenCV版本2.4.8(2014年2月24日)的下载和安装。与其说是安装,不如叫解压更加合适,因为我们下载的exe安装文件就是一个自解压程序而已。

在官网:https://www.sodocs.net/doc/6714991149.html,/上找到OpenCV windows版下载下来。 下载完后得到文件OpenCV 2.4.8,双击后会提示解压到某个地方,推荐放到D:\Program Files\下,比如D:\Program Files,(因为OpenCV项目文件打包的时候,根目录就是opencv,所以我们不需要额外的新建一个名为opencv的文件夹,然后再解压,那是多此一举的事情)然后点击Extract按钮 等一段时间,OpenCV2.4.8近3个多G的文件就解压到了D:\Program Files下。

其中,build里面是使用OpenCV相关的文件,我们如果只是使用OpenCV的话呢,就只用管build里面的内容。下面的sources文件夹你嫌烦,你嫌占硬盘空间,完全可以删掉。但是需要注意的是,官方示例集,也就是samples文件夹里面的示例程序,在sources文件夹里面躺着呢,所以,如果真是要删的话,还是想清楚哦。sources里面是源代码。想查看完整的源代码需要用cmake来“解包”,如何“解包”大家百度一下就可以,或者下次浅墨来专门讲一讲。这里就先不多说了。 2.配置环境变量 有些奇怪的是,浅墨在经历OpenCV 2.4.6,OpenCV 2.4.7,OpenCV 2.4.8这三个版本之间转换的时候,这三个版本的OpenCV存放在硬盘的不同的目录下。但就没动过这步里面的环境变量,或许新版本的OpenCV已经弱化了环境变量的配置。所以,大家可以先跳过这步,如果最终配置出来报错的话呢,可以考虑下根据实际情况加上这步的配置。 这步的配置方法如下: 计算机->(右键)属性->高级系统设置->高级(标签)->环境变量->(双击)path(用户,系统里面的path任选其一)->在变量值里面添加相应的路径。 对于32位系统,就添加: ”……opencv\build\x86\vc10\bin”

VS2013 中一次性配置OpenCV 图文教程

VS2013中一次性配置OpenCV图文教程 By:绘梦之卷 一、设置环境变量 (设置之前请下载解压好OpenCV) 单击桌面上的计算机图标右键选择属性,之后点击高级系统设置,如下图所示: 之后选择环境变量设置: 之后点击用户变量设置中的“编辑”添加用户变量:

添加的用户变量为opencv和PATH,值如下: 这里我选择安装路径为:D:\Program Files,不同的路径做相应的改动。 之后用相同的方法编辑系统变量,更改Path为D:\Program Files\opencv\build\x86\vc12\bin 二、设置VS2013

打开VS2013(我用的Express版)新建工程 选择win32的控制应用台程序 点击“OK”后选择“Next”,之后选择一个空项目,注意去掉预编译头选项。如下图:

点击“Finish”之后出现一下界面,在界面右侧点击“ConsoleApplications1”右键,之后选择“Properties” 之后在弹出的对话框里选择:“VC++Directories”

之后在右侧的“General”对话框里选择“Include Directories”双击,在之后的下拉箭头里选择“Edit”编辑,之后在弹出的对话框里单击空白位置(如下图所示),逐个添加红框内的路径。 用同样的方法更改“Library Directories”,添加路径:D:\Program Files\opencv\build\x86\vc12\lib. 完成之后继续Edit“Linker”中的Input中的“Additional Dependencies”

OpenCv矩阵操作函数源代码

/* //////////////////////////////////////////////////////////////////// // // CvMat, CvMatND, CvSparceMat and IplImage support functions // (creation, deletion, copying, retrieving and setting elements etc.) // // */ #include "_cxcore.h" static struct { Cv_iplCreateImageHeader createHeader; Cv_iplAllocateImageData allocateData; Cv_iplDeallocate deallocate; Cv_iplCreateROI createROI; Cv_iplCloneImage cloneImage; } CvIPL; // Makes the library use native IPL image allocators CV_IMPL void cvSetIPLAllocators( Cv_iplCreateImageHeader createHeader, Cv_iplAllocateImageData allocateData, Cv_iplDeallocate deallocate, Cv_iplCreateROI createROI, Cv_iplCloneImage cloneImage ) { CV_FUNCNAME( "cvSetIPLAllocators" ); __BEGIN__; if( !createHeader || !allocateData || !deallocate || !createROI || !cloneImage ) { if( createHeader || allocateData || deallocate || createROI || cloneImage ) CV_ERROR( CV_StsBadArg, "Either all the pointers should be null or " "they all should be non-null" ); } CvIPL.createHeader = createHeader; CvIPL.allocateData = allocateData; CvIPL.deallocate = deallocate; CvIPL.createROI = createROI; CvIPL.cloneImage = cloneImage;

相关主题