OpenCV基础程序汇总

以下我将提供一些用opencv写的基础程序。平地高楼起,最重要的是地基要打牢,不然就会成为空中楼阁!所以学习下基础opencv程序很有必要!

1.用opencv实现图片显示

#include "highgui.h"
#include "cv.h"
#include "cxcore.h"
int main()
{
      IplImage* src = cvLoadImage("E:\\image.jpeg",-1);//图片路径要自己选择
      cvNamedWindow("show_image",0);
      cvShowImage("show_image",src);
      cvWaitKey(0);
      cvReleaseImage(&src);
      cvDestroyWindow("show_image");
      return 0;

}

2.用opencv实现视频显示

#include "highgui.h"
int main() 
{
	IplImage* frame;
	 char c;
	CvCapture* capture = cvCreateFileCapture( "E:\\automation.wmv" );
    cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE ); 
    while(1) 
	{
        frame = cvQueryFrame( capture );
        if( !frame ) break;
        cvShowImage( "Example2", frame );
        c = cvWaitKey(33);
        if( c == 27 ) break;
    }
    cvReleaseCapture( &capture );
    cvDestroyWindow( "Example2" );
}

3.用opencv在一张图片上写英文文字

#include "cv.h"
#include "highgui.h"
#include "iostream"
using namespace std;

int main()
{
	IplImage* pImg = cvLoadImage("E://image.jpeg");
	if (!pImg)
	{
		cout<<"pImg load error..."<<endl;
		system("pause");
		exit(-1);
	}

	CvFont font;
	cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0, 0, 2, 8);
	cvPutText(pImg, "Hello,world", cvPoint(50, 50), &font, CV_RGB(255,0,0));
	
	cvSaveImage("E://image.jpeg", pImg);

	cvNamedWindow("img", 0);
	cvShowImage("img", pImg);
	cvWaitKey(0);

	system("pause");
	cvReleaseImage(&pImg);
	cvDestroyAllWindows();

	return 0;
}

4.OpenCV实现静止背景下运动目标的检测

#include "cv.h"
#include "highgui.h"
#include "iostream"
int main()
{
//声明IplImage指针  
IplImage* pFrame = NULL;   
IplImage* pFrImg = NULL;  
IplImage* pBkImg = NULL;  
CvMat* pFrameMat = NULL;  
CvMat* pFrMat = NULL;  
CvMat* pBkMat = NULL;  
CvCapture* pCapture = NULL;  
int nFrmNum = 0;  
//创建窗口  
cvNamedWindow("video", 1);  
cvNamedWindow("background",1);  
cvNamedWindow("foreground",1);  
//使窗口有序排列  
cvMoveWindow("video", 30, 0);  
cvMoveWindow("background", 360, 0);  
cvMoveWindow("foreground", 690, 0);  
//pCapture = cvCaptureFromAVI("2.avi");   //读入已有视频用此句  
pCapture = cvCaptureFromCAM(0);           //从摄像头读入视频用此  
while(pFrame = cvQueryFrame( pCapture ))  
{  
 nFrmNum++;  
 //如果是第一帧,需要申请内存,并初始化  
 if(nFrmNum == 1)  
 {  
 pBkImg=cvCreateImage(cvSize(pFrame->width,pFrame->height),IPL_DEPTH_8U,1);  
 pFrImg=cvCreateImage(cvSize(pFrame->width,pFrame->height), IPL_DEPTH_8U,1);  
 pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);  
 pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);  
 pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);  
 //转化成单通道图像再处理  
 cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);  
 cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);  
 cvConvert(pFrImg, pFrameMat);  
 cvConvert(pFrImg, pFrMat);  
 cvConvert(pFrImg, pBkMat);  
}  
 else  
 {  
        cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);  
        cvConvert(pFrImg, pFrameMat);  
        //先做高斯滤波,以平滑图像  
        cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0);  
        //当前帧跟背景图相减  
        cvAbsDiff(pFrameMat, pBkMat, pFrMat);  
        //二值化前景图  
        cvThreshold(pFrMat, pFrImg, 10, 255.0, CV_THRESH_BINARY);  
        //更新背景  
        cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);  
        //将背景转化为图像格式,用以显示  
        cvConvert(pBkMat, pBkImg);  
        pFrame->origin = IPL_ORIGIN_BL;  
        pFrImg->origin = IPL_ORIGIN_BL;  
        pBkImg->origin = IPL_ORIGIN_BL;  
        cvShowImage("video", pFrame);  
        cvShowImage("background", pBkImg);  
        cvShowImage("foreground", pFrImg);  
        //如果有按键事件,则跳出循环  
        //此等待也为cvShowImage函数提供时间完成显示  
        //等待时间可以根据CPU速度调整  
        if( cvWaitKey(2) >= 0 )  
            break;  
    }  
}  
//销毁窗口  
cvDestroyWindow("video");  
cvDestroyWindow("background");  
cvDestroyWindow("foreground");  
//释放图像和矩阵  
cvReleaseImage(&pFrImg);  
cvReleaseImage(&pBkImg);  
cvReleaseMat(&pFrameMat);  
cvReleaseMat(&pFrMat);  
cvReleaseMat(&pBkMat);  
cvReleaseCapture(&pCapture);
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值