OpenCV例程汇总.doc

上传人:hw****26 文档编号:3552267 上传时间:2019-06-04 格式:DOC 页数:93 大小:1.98MB
下载 相关 举报
OpenCV例程汇总.doc_第1页
第1页 / 共93页
OpenCV例程汇总.doc_第2页
第2页 / 共93页
OpenCV例程汇总.doc_第3页
第3页 / 共93页
OpenCV例程汇总.doc_第4页
第4页 / 共93页
OpenCV例程汇总.doc_第5页
第5页 / 共93页
点击查看更多>>
资源描述

1、OpenCV 例程汇总基于 opencv 的 use 摄像头视频采集程序 .1基于 opencv 的两个摄像头数据采集 .3能激发你用代码做视频的冲动程序 .6图像反转(就是把黑的变白,白的变黑) .11图像格式的转换 .12从摄像头或者 AVI 文件中得到视频流,对视频流进行边缘检测 .13采用 Canny 算子进行边缘检测 .15角点检测 .18图像的旋转加缩放(效果很拽,用地球做就像谷歌地球似的) .21Log-Polar 极坐标变换 .22对图像进行形态学操作(图像的开闭,腐蚀和膨胀运算) .24用不同的核进行图像的二维滤波 .27图像域的填充 .30寻找轮廓实现视频流的运动目标检测(

2、超推荐一下) .35采用金字塔方法进行图像分割 .40图像的亮度变换 .43单通道图像的直方图 .46计算和显示彩色图像的二维色调-饱和度图像 .48图像的直方图均匀化 .50用 Hongh 变换检测线段 .52利用 Hough 变换检测圆(是圆不是椭圆) .57距离变换 .59椭圆曲线拟合 .64由点集序列或数组创建凸外形 .68Delaunay 三角形和 Voronoi 划分的迭代式构造 .71利用背景建模检测运动物体(推荐) .78运动模板检测(摄像头) .81显示如何利用 Camshift 算法进行彩色目标的跟踪 .86基于 opencv 的 use 摄像头视频采集程序准备工作:你得把

3、 opencv 库装到电脑上,并把各种头文件,源文件,lib 库都连到 vc 上,然后设置一下系统环境变量,这里这方面就不说了,好像我前面的文章有说过,不懂也可百度一下。建立一个基于 WIN32 控制台的工程 CameraUSB,在新建一个 c+元文件,写代码:#include “cxcore.h“#include “cvcam.h“#include “windows.h“#include “highgui.h“void callback(IplImage* image);int main()int ncams=cvcamGetCamerasCount( );/返回可以访问的摄像头数目HWND

4、 MyWin;/ 设置系统属性cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); /选择第一个摄像头/cameracvcamSetProperty(0, CVCAM_PROP_RENDER, CVCAMTRUE); /Well render stream/ 在本例中/ 假设创建一个窗口,并且窗口的 ID 是在变量 MyWin 中定义/ MyWin 是窗口 HWND 的类型MyWin=(HWND)cvGetWindowHandle(“CameraUSB window“); cvcamSetProperty(0,CVCAM_PROP_WINDOW,

5、 / Selects a window for /video rendering/回调函数将处理每一帧cvcamSetProperty(0,CVCAM_PROP_CALLBACK,callback);cvcamInit( );cvcamStart( );/ 现在程序开始工作cvWaitKey(0);cvcamStop( );cvcamExit( );return 0;/ 在图像中画兰色水平线void callback(IplImage* image)IplImage* image1 = image;int i,j;assert (image);for(i=0; iheight; i+=10)f

6、or(j=(image1-widthStep)*i; jwidthStep)*(i+1); j+=image1-nChannels)image1-imageDataj = (char)255;image1-imageDataj+1 = 0;image1-imageDataj+2 = 0; 嘿嘿,就这么简单就完事了。不懂可留言问基于 opencv 的两个摄像头数据采集实现功能:同时采集两路 USB 摄像头数据,并显示,具有图片保存功能(点击左键保存图片,并暂停视频;右键继续视频)。步骤就不说了,很简单,直接放代码了:#include #include #include #include “std

7、io.h“#include void StereoCallback(IplImage *frame1,IplImage *frame2);void onMouse1(int Event,int x,int y,int flags,void *param);void onMouse2(int Event,int x,int y,int flags,void *param);IplImage *image1,*image2;char *strleft4=“left1.bmp“,“left2.bmp“,“left3.bmp“,“left4.bmp“;char *strright4=“right1.b

8、mp“,“right2.bmp“,“right3.bmp“,“right4.bmp“;void main()HWND CaptureWindow1=0; /不赋值也行HWND CaptureWindow2=0;/int ncams=cvcamGetCamerasCount(); /获取摄像头的个数,在这里可有可无/用对话框的形式来选取摄像头int *CameraNumber;int nSelected = cvcamSelectCamera(/* /灰色图像image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,1);image2=cvCreateI

9、mage(cvSize(320,240),IPL_DEPTH_8U,1);*/彩色图像image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);image2=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);/初始化两个摄像头cvNamedWindow(“cvcam1 Window“,1);CaptureWindow1=(HWND)cvGetWindowHandle(“cvcam1 Window“);cvcamSetProperty(CameraNumber0, CVCAM_PROP_ENABLE, CV

10、CAMTRUE);cvcamSetProperty(CameraNumber0, CVCAM_PROP_RENDER, CVCAMTRUE);cvcamSetProperty(CameraNumber0, CVCAM_PROP_WINDOW, / cvSetMouseCallback(“cvcam1 Window“,onMouse1,0);cvNamedWindow(“cvcam2 Window“,1);CaptureWindow2=(HWND)cvGetWindowHandle(“cvcam2 Window“);cvcamSetProperty(CameraNumber1, CVCAM_PR

11、OP_ENABLE, CVCAMTRUE);cvcamSetProperty(CameraNumber1, CVCAM_PROP_RENDER, CVCAMTRUE);cvcamSetProperty(CameraNumber1, CVCAM_PROP_WINDOW, / cvSetMouseCallback(“cvcam2 Window“,onMouse2,0);/让两个摄像头同步 cvcamSetProperty(CameraNumber0,CVCAM_STEREO_CALLBACK,(void*) /启动程序cvcamInit();cvcamStart();cvSetMouseCallb

12、ack(“cvcam1 Window“,onMouse1,0);cvSetMouseCallback(“cvcam2 Window“,onMouse2,0);cvWaitKey(0);cvcamStop();free(CameraNumber);cvcamExit();cvDestroyWindow(“cvcam1 Window“);cvDestroyWindow(“cvcam2 Window“);void StereoCallback(IplImage* frame1,IplImage *frame2)/* /把图像转换成灰度图并保存到 image 中cvCvtColor(frame1,im

13、age1,CV_RGB2GRAY);cvCvtColor(frame2,image2,CV_RGB2GRAY);*/拷贝图像到全局变量 image 中 该函数这样用存在问题 / cvCopy(frame1,image1);/ cvCopy(frame2,image2);image1=cvCloneImage(frame1);image2=cvCloneImage(frame2);/对截取的图像翻转cvFlip(image1,image1,0);cvFlip(image2,image2,0);void onMouse1(int Event,int x,int y,int flags,void *

14、param)static int num=0;if(Event=CV_EVENT_LBUTTONDOWN)if(num=4)num=0;/只是固定定义了保存 4 张图片,为了不让程序非法而设置的复原cvcamPause();/图像保存cvSaveImage(strleftnum,image1); / cvSaveImage(strrightnum,image2);/ cvSaveImage(“left.bmp“,image1);/ cvSaveImage(“right.bmp“,image2);if(Event=CV_EVENT_RBUTTONDOWN)cvcamResume();num+;v

15、oid onMouse2(int Event,int x,int y,int flags,void *param)static int num=0;if(Event=CV_EVENT_LBUTTONDOWN)if(num=4)num=0;/只是固定定义了保存 4 张图片,为了不让程序非法而设置的复原cvcamPause();/图像保存/ cvSaveImage(strleftnum,image1); cvSaveImage(strrightnum,image2);/ cvSaveImage(“left.bmp“,image1);/ cvSaveImage(“right.bmp“,image2)

16、;if(Event=CV_EVENT_RBUTTONDOWN)cvcamResume();num+;能激发你用代码做视频的冲动程序这个程序是基于 opencv 的,连接库就不说了,直接建立一个基于 win32 的控制台程序,写代码就 OK 了。/* 程序名:drawing.c功能:展示 OpenCV 的图像绘制功能*/#include “cv.h“#include “highgui.h“#include #include #define NUMBER 100#define DELAY 5char wndname = “Drawing Demo“;CvScalar random_color(Cv

17、RNG* rng) /函数 cvRNG 初始化随机数生成器并返回其状态,RNG 随机数生成器int icolor = cvRandInt(rng); /函数 cvRandInt 返回均匀分布的随机 32-bit 无符号整型值并更新 RNG 状态return CV_RGB(icolor /创建 一个色彩值int main( int argc, char* argv )int line_type = CV_AA; / change it to 8 to see non-antialiased graphicsint i;CvPoint pt1,pt2; /基于二维整形坐标轴的点double ang

18、le;CvSize sz; /矩形框大小,以像素为精度CvPoint ptt6;CvPoint* pt2;int arr2;CvFont font;CvRNG rng;int width = 1000, height = 700;int width3 = width*3, height3 = height*3;CvSize text_size;int ymin = 0;/ Load the source imageIplImage* image = cvCreateImage( cvSize(width,height), 8, 3 );IplImage* image2;/ Create a w

19、indowcvNamedWindow(wndname, 1 );cvZero( image ); /#define cvZero cvSetZero void cvSetZero( CvArr* arr ); arr 要被清空数组cvShowImage(wndname,image);rng = cvRNG(unsigned)-1);pt0 = pt1 = arr0 = 3;arr1 = 3;for (i = 0; i NUMBER; i+)pt1.x=cvRandInt(pt1.y=cvRandInt(pt2.x=cvRandInt(pt2.y=cvRandInt(cvLine( image,

20、 pt1, pt2, random_color(/绘制连接两个点的线段 cvShowImage(wndname,image);cvWaitKey(DELAY);for (i = 0; i NUMBER; i+)pt1.x=cvRandInt(pt1.y=cvRandInt(pt2.x=cvRandInt(pt2.y=cvRandInt(cvRectangle( image,pt1, pt2, random_color(/绘制简单、指定粗细或者带填充的 矩形cvShowImage(wndname,image);cvWaitKey(DELAY);for (i = 0; i NUMBER; i+)p

21、t1.x=cvRandInt(pt1.y=cvRandInt(sz.width =cvRandInt(sz.height=cvRandInt(angle = (cvRandInt(cvEllipse( image, pt1, sz, angle, angle - 100, angle + 200,random_color(/函数 cvEllipse 用来绘制或者填充一个简单的椭圆弧或椭圆扇形cvShowImage(wndname,image);cvWaitKey(DELAY);for (i = 0; i NUMBER; i+)pt00.x=cvRandInt(pt00.y=cvRandInt(

22、pt01.x=cvRandInt(pt01.y=cvRandInt(pt02.x=cvRandInt(pt02.y=cvRandInt(pt10.x=cvRandInt(pt10.y=cvRandInt(pt11.x=cvRandInt(pt11.y=cvRandInt(pt12.x=cvRandInt(pt12.y=cvRandInt(cvPolyLine( image, pt, arr, 2, 1, random_color(/函数 cvPolyLine 绘制一个简单的或多样的多角曲线cvShowImage(wndname,image);cvWaitKey(DELAY);for (i =

23、0; i NUMBER; i+)pt00.x=cvRandInt(pt00.y=cvRandInt(pt01.x=cvRandInt(pt01.y=cvRandInt(pt02.x=cvRandInt(pt02.y=cvRandInt(pt10.x=cvRandInt(pt10.y=cvRandInt(pt11.x=cvRandInt(pt11.y=cvRandInt(pt12.x=cvRandInt(pt12.y=cvRandInt(cvFillPoly( image, pt, arr, 2, random_color(/函数 cvFillPoly 用于一个单独被多变形轮廓所限定的区域内进行

24、填充cvShowImage(wndname,image);cvWaitKey(DELAY);for (i = 0; i NUMBER; i+)pt1.x=cvRandInt(pt1.y=cvRandInt(cvCircle( image, pt1, cvRandInt(/函数cvCircle 绘制或填充一个给定圆心和半径的圆cvShowImage(wndname,image);cvWaitKey(DELAY);for (i = 1; i NUMBER; i+)pt1.x=cvRandInt(pt1.y=cvRandInt(cvInitFont( /字体结构初始化。函数 cvRound, cvF

25、loor, cvCeil 用一种舍入方法将输入浮点数转换成整数。 cvRound 返回和参数最接近的整数值cvPutText( image, “Northeast Petroleum University!“, pt1, /在图像中加入文本cvShowImage(wndname,image);cvWaitKey(DELAY);cvInitFont( cvGetTextSize( “Opencv forever!“, /设置字符串文本的宽度和高度pt1.x = (width - text_size.width)/2;pt1.y = (height + text_size.height)/2;image2 = cvCloneImage(image);for( i = 0; i 255; i+ )cvSubS( image2, cvScalarAll(i), image, 0 );/函数 cvSubS 从原数组的每个元素中减去一个数量cvPutText( image, “shentuhongfeng forever!“, pt1, cvShowImage(wndname,image);cvWaitKey(DELAY);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。