OpenCV汇总Word下载.docx
- 文档编号:22338248
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:122
- 大小:1.60MB
OpenCV汇总Word下载.docx
《OpenCV汇总Word下载.docx》由会员分享,可在线阅读,更多相关《OpenCV汇总Word下载.docx(122页珍藏版)》请在冰豆网上搜索。
准备工作:
你得把opencv库装到电脑上,并把各种头文件,源文件,lib库都连到vc上,然后设置一下系统环境变量,这里这方面就不说了,好像我前面的文章有说过,不懂也可XX一下。
建立一个基于WIN32控制台的工程CameraUSB,在新建一个c++元文件,写代码:
#include"
cxcore.h"
cvcam.h"
windows.h"
highgui.h"
voidcallback(IplImage*image);
intmain()
{
intncams=cvcamGetCamerasCount();
//返回可以访问的摄像头数目
HWNDMyWin;
//设置系统属性
cvcamSetProperty(0,CVCAM_PROP_ENABLE,CVCAMTRUE);
//选择第一个摄像头
//camera
cvcamSetProperty(0,CVCAM_PROP_RENDER,CVCAMTRUE);
//We'
llrenderstream
//在本例中
//假设创建一个窗口,并且窗口的ID是在变量MyWin中定义
//MyWin是窗口HWND的类型
MyWin=(HWND)cvGetWindowHandle("
CameraUSBwindow"
);
cvcamSetProperty(0,CVCAM_PROP_WINDOW,&
MyWin);
//Selectsawindowfor
//videorendering
//回调函数将处理每一帧
cvcamSetProperty(0,CVCAM_PROP_CALLBACK,callback);
cvcamInit();
cvcamStart();
//现在程序开始工作
cvWaitKey(0);
cvcamStop();
cvcamExit();
return0;
}
//在图像中画兰色水平线
voidcallback(IplImage*image)
IplImage*image1=image;
inti,j;
assert(image);
for(i=0;
i<
image1->
height;
i+=10)
{
for(j=(image1->
widthStep)*i;
j<
(image1->
widthStep)*(i+1);
j+=image1->
nChannels)
image1->
imageData[j]
=(char)255;
imageData[j+1]=0;
imageData[j+2]=0;
}
}
嘿嘿,就这么简单就完事了。
不懂可留言问
基于opencv的两个摄像头数据的采集
实现功能:
同时采集两路USB摄像头数据,并显示,具有图片保存功能(点击左键保存图片,并暂停视频;
右键继续视频)。
步骤就不说了,很简单,直接放代码了:
#include<
cvcam.h>
cv.h>
highgui.h>
stdio.h"
windows.h>
voidStereoCallback(IplImage*frame1,IplImage*frame2);
voidonMouse1(intEvent,intx,inty,intflags,void*param);
voidonMouse2(intEvent,intx,inty,intflags,void*param);
IplImage*image1,*image2;
char*strleft[4]={"
left1.bmp"
"
left2.bmp"
left3.bmp"
left4.bmp"
};
char*strright[4]={"
right1.bmp"
right2.bmp"
right3.bmp"
right4.bmp"
voidmain()
HWNDCaptureWindow1=0;
//不赋值也行
HWNDCaptureWindow2=0;
//intncams=cvcamGetCamerasCount();
//获取摄像头的个数,在这里可有可无
//用对话框的形式来选取摄像头
int*CameraNumber;
intnSelected=cvcamSelectCamera(&
CameraNumber);
/*//灰色图像
image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,1);
image2=cvCreateImage(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("
cvcam1Window"
1);
CaptureWindow1=(HWND)cvGetWindowHandle("
cvcamSetProperty(CameraNumber[0],CVCAM_PROP_ENABLE,CVCAMTRUE);
cvcamSetProperty(CameraNumber[0],CVCAM_PROP_RENDER,CVCAMTRUE);
cvcamSetProperty(CameraNumber[0],CVCAM_PROP_WINDOW,&
CaptureWindow1);
//cvSetMouseCallback("
onMouse1,0);
cvcam2Window"
CaptureWindow2=(HWND)cvGetWindowHandle("
cvcamSetProperty(CameraNumber[1],CVCAM_PROP_ENABLE,CVCAMTRUE);
cvcamSetProperty(CameraNumber[1],CVCAM_PROP_RENDER,CVCAMTRUE);
cvcamSetProperty(CameraNumber[1],CVCAM_PROP_WINDOW,&
CaptureWindow2);
onMouse2,0);
//让两个摄像头同步
cvcamSetProperty(CameraNumber[0],CVCAM_STEREO_CALLBACK,(void*)&
StereoCallback);
//启动程序
cvcamInit();
cvcamStart();
cvSetMouseCallback("
cvcamStop();
free(CameraNumber);
cvcamExit();
cvDestroyWindow("
voidStereoCallback(IplImage*frame1,IplImage*frame2)
/*
//把图像转换成灰度图并保存到image中
cvCvtColor(frame1,image1,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);
voidonMouse1(intEvent,intx,inty,intflags,void*param)
staticintnum=0;
if(Event==CV_EVENT_LBUTTONDOWN)
if(num==4)num=0;
//只是固定定义了保存4张图片,为了不让程序非法而设置的复原
cvcamPause();
//图像保存
cvSaveImage(strleft[num],image1);
//cvSaveImage(strright[num],image2);
//cvSaveImage("
left.bmp"
image1);
right.bmp"
image2);
if(Event==CV_EVENT_RBUTTONDOWN)
cvcamResume();
num++;
voidonMouse2(intEvent,intx,inty,intflags,void*param)
//
cvSaveImage(strright[num],image2);
能激发你用代码做视频的冲动程序
这个程序是基于opencv的,连接库就不说了,直接建立一个基于win32的控制台程序,写代码就OK了。
/*程序名:
drawing..c
功能:
展示OpenCV的图像绘制功能
cv.h"
stdlib.h>
stdio.h>
#defineNUMBER100
#defineDELAY5
charwndname[]="
DrawingDemo"
;
CvScalarrandom_color(CvRNG*rng)//函数cvRNG初始化随机数生成器并返回其状态,RNG随机数生成器
inticolor=cvRandInt(rng);
//函数cvRandInt返回均匀分布的随机32-bit无符号整型值并更新RNG状态
returnCV_RGB(icolor&
255,(icolor>
>
8)&
16)&
255);
//创建一个色彩值
intmain(intargc,char**argv)
intline_type=CV_AA;
//changeitto8toseenon-antialiasedgraphics
inti;
CvPointpt1,pt2;
//基于二维整形坐标轴的点
doubleangle;
CvSizesz;
//矩形框大小,以像素为精度
CvPointptt[6];
CvPoint*pt[2];
intarr[2];
CvFontfont;
CvRNGrng;
intwidth=1000,height=700;
intwidth3=width*3,height3=height*3;
CvSizetext_size;
intymin=0;
//Loadthesourceimage
IplImage*image=cvCreateImage(cvSize(width,height),8,3);
IplImage*image2;
//Createawindow
cvNamedWindow(wndname,1);
cvZero(image);
//#definecvZerocvSetZero
voidcvSetZero(CvArr*arr);
arr要被清空数组
cvShowImage(wndname,image);
rng=cvRNG((unsigned)-1);
pt[0]=&
(ptt[0]);
pt[1]=&
(ptt[3]);
arr[0]=3;
arr[1]=3;
for(i=0;
NUMBER;
i++)
pt1.x=cvRandInt(&
rng)%width3-width;
pt1.y=cvRandInt(&
rng)%height3-height;
pt2.x=cvRandInt(&
pt2.y=cvRandInt(&
cvLine(image,pt1,pt2,random_color(&
rng),cvRandInt(&
rng)%10,line_type,0);
//绘制连接两个点的线段
cvWaitKey(DELAY);
cvRectangle(image,pt1,pt2,random_color(&
rng)%10-1,line_type,0);
//绘制简单、指定粗细或者带填充的矩形
sz.width=cvRandInt(&
rng)%200;
sz.height=cvRandInt(&
angle=(cvRandInt(&
rng)%1000)*0.180;
cvEllipse(image,pt1,sz,angle,angle-100,angle+200,
random_color(&
//函数cvEllipse用来绘制或者填充一个简单的椭圆弧或椭圆扇形
pt[0][0].x=cvRandInt(&
pt[0][0].y=cvRandInt(&
pt[0][1].x=cvRandInt(&
pt[0][1].y=cvRandInt(&
pt[0][2].x=cvRandInt(&
pt[0][2].y=cvRandInt(&
pt[1][0].x=cvRandInt(&
pt[1][0].y=cvRandInt(&
pt[1][1].x=cvRandInt(&
pt[1][1].y=cvRandInt(&
pt[1][2].x=cvRandInt(&
pt[1][2].y=cvRandInt(&
cvPolyLine(image,pt,arr,2,1,random_color(&
//函数cvPolyLine绘制一个简单的或多样的多角曲线
cvFillPoly(image,pt,arr,2,random_color(&
rng),line_type,0);
//函数cvFillPoly用于一个单独被多变形轮廓所限定的区域内进行填充
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenCV 汇总