📄 test.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 + -