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);
} 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章