00001
00007 #include "stdafx.h"
00008 #include <stdio.h>
00009 #include <stdlib.h>
00010 #include <time.h>
00011 #include <windows.h>
00012 #include <math.h>
00013
00014 #include <dvcAPI.h>
00015 #include <dvcImage.h>
00021 int main(int argc, char* argv[])
00022 {
00023 HANDLE hDevice ;
00024 HANDLE hEvent ;
00025 int i ;
00026 int nFrames = 8 ;
00027 int nWidth, nHeight ;
00028 int nWaitMsec ;
00029 BOOL bRC ;
00030 BOOL bSaveAsRGB = FALSE ;
00031 BOOL bVerbose = FALSE ;
00032 char fname[256] = "\0" ;
00033
00034 CDVCImage sumImage ;
00035 CDVCImage captureImage ;
00036 CDVCImage averageImage ;
00039 hDevice = dvcOpenCamera(1) ;
00040
00041 if(hDevice == INVALID_HANDLE_VALUE)
00042 {
00043 fprintf(stderr,"Error opening DVC Camera!\n");
00044 return -1 ;
00045 }
00046
00059 for( i = 1 ; i < argc ; i++ )
00060 {
00061 if(i+1 < argc && !strcmp(argv[i],"-b"))
00062 {
00063 int nBin = atoi(argv[++i]) ;
00064 bRC = dvcSetBinning(hDevice, nBin) ;
00065 if(!bRC)
00066 dvcPrintf(0,"%s: Error setting binning %d\n", argv[0],nBin);
00067 }
00068 else if(i+1 < argc && !strcmp(argv[i], "-g"))
00069 {
00070 int nGain = atoi(argv[++i]) ;
00071 bRC = dvcSetGain(hDevice, nGain) ;
00072 if(!bRC)
00073 dvcPrintf(0,"%s: Error setting gain %d\n", argv[0],nGain);
00074 }
00075 else if(i+1 < argc && !strcmp(argv[i], "-o"))
00076 {
00077 int nOffset = atoi(argv[++i]) ;
00078 bRC = dvcSetOffset(hDevice, nOffset) ;
00079 if(!bRC)
00080 dvcPrintf(0,"%s: Error setting offset %d\n", argv[0],nOffset);
00081 }
00082 else if(i+1 < argc && !strcmp(argv[i], "-e"))
00083 {
00084 double dExposeMsec = atof(argv[++i]) ;
00085 double dReturnExp = dvcSetExposeMsec(hDevice, dExposeMsec) ;
00086
00087 if(dReturnExp != dExposeMsec)
00088 dvcPrintf(0,"%s: Set expose to %g [ Not %g ]\n",
00089 argv[0], dReturnExp, dExposeMsec);
00090
00091 }
00092 else if(i+1 < argc && !strcmp(argv[i], "-n"))
00093 {
00094 nFrames = atoi(argv[++i]);
00095 if(nFrames < 1) nFrames = 1 ;
00096 }
00097 else if(i+1 < argc && !strcmp(argv[i], "-f"))
00098 {
00099 sprintf(fname,"%s",argv[++i]) ;
00100 }
00101 else if(!strcmp(argv[i], "-rgb"))
00102 bSaveAsRGB = TRUE ;
00103 else if(!strcmp(argv[i], "-v"))
00104 bVerbose = TRUE ;
00105 }
00106
00107
00108
00109 if(fname[0] == '\0') sprintf(fname,"dvcAvg%d.tif",nFrames);
00110
00111 nWidth = dvcGetXDim(hDevice) ;
00112 nHeight = dvcGetYDim(hDevice) ;
00113
00114
00115 captureImage.Create(nWidth,nHeight,2) ;
00116
00117 if( nFrames >= 16 )
00118 sumImage.Create(nWidth, nHeight, 4 ) ;
00119 else
00120 sumImage.Create(nWidth, nHeight, 2 ) ;
00121
00122
00123 averageImage.Create(nWidth,nHeight,2) ;
00124
00125
00126
00127 hEvent = CreateEvent(NULL,FALSE,FALSE,NULL) ;
00128 dvcSetReadCompleteEvent(hDevice, hEvent) ;
00129
00130 nWaitMsec = (int) dvcGetTimeToReadImage(hDevice) + 1000 ;
00131
00132 bRC = dvcStartSequence(hDevice, 0) ;
00133 if(!bRC)
00134 {
00135 dvcPrintf(0,"%s: Error starting video capture..\n", argv[0] );
00136 dvcSetReadCompleteEvent(hDevice, NULL) ;
00137 dvcCloseCamera(hDevice);
00138 return -1 ;
00139 }
00140
00141 for( i=0 ; bRC && i < nFrames; i++ )
00142 {
00143 if(bVerbose) dvcPrintf(0,"Waiting for Frame %d\n", i+1) ;
00144 bRC = WaitForSingleObject(hEvent, nWaitMsec) == WAIT_OBJECT_0 ;
00145 if(bRC){
00146 if(bVerbose) dvcPrintf(0,"Read Event rec'd %d\n", i+1) ;
00147 captureImage.ReadCamera(hDevice,0, 0, nWidth, nHeight) ;
00148 if(bVerbose) dvcPrintf(0,"Captured %d\n", i+1) ;
00149 sumImage.Add(&captureImage) ;
00150 if(bVerbose) dvcPrintf(0,"Summed %d\n", i+1) ;
00151 }
00152 else dvcPrintf(0,"Waiting for read complete failed!\n");
00153 }
00154
00155 dvcStopSequence(hDevice) ;
00156
00157 if(bRC) {
00158
00159
00160
00161 if(bVerbose) dvcPrintf(0,"Averaging %d\n", nFrames) ;
00162 averageImage.DivideCopy(&sumImage, nFrames) ;
00163
00164 RECT rect ;
00165 rect.top = 0 ;
00166 rect.left = 0 ;
00167 rect.right = nWidth ;
00168 rect.bottom = nHeight ;
00169
00170 int nRenderBits = dvcGetNBits(hDevice) ;
00171 if(bSaveAsRGB) nRenderBits = 24 ;
00172
00173 if(bVerbose) dvcPrintf(0,"Saveing data in %s ( %d bits/pixel )\n",
00174 fname, nRenderBits ) ;
00175
00176
00177 averageImage.Render(fname,
00178 &rect,
00179 nRenderBits,
00180 0) ;
00181
00182 averageImage.CloseFile();
00183
00184 }else dvcPrintf(0,"%s: Failed!\n", argv[0]) ;
00185
00186 dvcSetReadCompleteEvent(hDevice, NULL) ;
00187 CloseHandle(hEvent) ;
00188
00189 dvcCloseCamera(hDevice) ;
00190 return bRC ? 0 : -1 ;
00191 }
00192