⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.cpp

📁 利用opencv开发包
💻 CPP
字号:
#include <cvcam.h>
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <windows.h>

//画直方图用
int HistogramBins = 256;
float HistogramRange1[2]={0,255};
float *HistogramRange[1]={&HistogramRange1[0]};
//////

long iframe=0;
int  framerate=10;


void CaptureCallback(IplImage *frame1);
void StereoCallback(IplImage frame1,IplImage *frame2);

float CompareHist();

int main()
{
    HWND CaptureWindow1=0;
    HWND CaptureWindow2=0; 

	CvCapture* capture = 0;
	IplImage* frame =  0 ;

    int *CameraNumber;
    int nSelected = cvcamSelectCamera(&CameraNumber);



    if(nSelected==1)
    {
		/*
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_ENABLE, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_RENDER, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[0], CVCAM_STEREO_CALLBACK,(void *)&CaptureCallback);
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_WINDOW, &CaptureWindow1);
		*/

		/*
		一个摄像头的情况就对比前后两次采集的图片的直方图		
		*/
		int flag = 1;
		int time = 0;

        capture = cvCaptureFromCAM( CameraNumber[0] );     
        cvNamedWindow( "Frame", 0 );
		for(;;)
		{
						
			frame = cvQueryFrame( capture);
			if( !frame )
				break;
			
			iframe++;
			time++;
			if(iframe%framerate==0 )
			{
				if(flag == 1)
				{
					cvShowImage("Frame", frame);					
					cvSaveImage("captureImage1.jpg",frame);					
					flag = 2;
				}
				else
				{
					cvShowImage("Frame", frame);					
					cvSaveImage("captureImage2.jpg",frame);					
					flag = 1;

				}

				

				////////////////采集到两个图片之后比较它们的直方图////////////////
				if(time != 1)
					printf("相似度:%f\n",CompareHist());
				
			}
			
			if( cvWaitKey(10) >= 0 )
				break;
		}

		

    }
    else if(nSelected==2)
    { 
        cvNamedWindow("cvcam1 Window",1);
        CaptureWindow1=(HWND)cvGetWindowHandle("cvcam1 Window");
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_ENABLE, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_RENDER, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[0], CVCAM_STEREO_CALLBACK,(void *)&StereoCallback);
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_WINDOW, &CaptureWindow1);
        
		

        cvNamedWindow("cvcam2 Window",1);
        CaptureWindow2=(HWND)cvGetWindowHandle("cvcam2 Window");
        cvcamSetProperty(CameraNumber[1], CVCAM_PROP_ENABLE, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[1], CVCAM_PROP_RENDER, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[1], CVCAM_STEREO_CALLBACK,(void *)&StereoCallback);
        cvcamSetProperty(CameraNumber[1], CVCAM_PROP_WINDOW, &CaptureWindow2); 


		

    }

    cvcamInit();
    cvcamStart();

    cvWaitKey(0);

    cvcamStop();
    cvcamExit();
    free(CameraNumber);

	cvReleaseCapture( &capture );

    cvDestroyWindow("cvcam1 Window");
    cvDestroyWindow("cvcam2 Window");
	return 0;
}
void CaptureCallback(IplImage *frame1)
{}
void StereoCallback(IplImage frame1,IplImage *frame2)
{}

float CompareHist()
{
	IplImage *Image1=cvLoadImage("captureImage1.jpg",0);
    IplImage *Image2=cvLoadImage("captureImage2.jpg",0);

    CvHistogram *Histogram1=cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);
    CvHistogram *Histogram2=cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);

    cvCalcHist(&Image1,Histogram1);
    cvCalcHist(&Image2,Histogram2);

    cvNormalizeHist(Histogram1,1);
    cvNormalizeHist(Histogram2,1);

    
    /*CV_COMP_CHISQR,CV_COMP_BHATTACHARYYA这两种都可以用来做直方图的比较,值越小,说明图形越相似
	printf("CV_COMP_CHISQR : %.4f\n",cvCompareHist(Histogram1,Histogram2,CV_COMP_CHISQR));
    printf("CV_COMP_BHATTACHARYYA : %.4f\n",cvCompareHist(Histogram1,Histogram2,CV_COMP_BHATTACHARYYA));
	*/

    return cvCompareHist(Histogram1,Histogram2,CV_COMP_BHATTACHARYYA);
    //////////***显示对比的两张原图片***/////////////////
	/*
	cvNamedWindow("Image1",1);
    cvNamedWindow("Image2",1);
    cvShowImage("Image1",Image1);
    cvShowImage("Image2",Image2);
    cvWaitKey(0);
	*/

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -