#pragma hdrstop
#pragma argsused
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <cv.h>
#include <highgui.h>
#include <cvcompat.h>
#include <windows.h>
#include <winbase.h>
int main()
{
IplImage *img = 0;
IplImage *monoImg = 0, *resultat = 0, *dst = 0;
int height, width, step;
uchar * data;
int stepResultat;
uchar * dataResultat;
int i, j, k;
float POS_X;
int CON_1;
int percent=50; unsigned char SENTIT[4];
unsigned short int rpm;
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts = {0};
DWORD dwBytesTrans = 0;
cvSize(10,10);
strcpy(SENTIT,"012");
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if( !capture )
{
fprintf( stderr, "ERROR: capture is NULL \n" );
getchar();
return -1;
}
img = cvQueryFrame( capture );
if( !img )
{
fprintf( stderr, "ERROR: frame is null...\n" );
getchar();
return -1;
}
dst = cvCreateImage(
cvSize(
img->width * percent / 100,
img->height * percent / 100),
img->depth,
img->nChannels
);
cvResize(img, dst, CV_INTER_LINEAR);
monoImg = cvCreateImage (cvGetSize (dst), 8, 1);
resultat = cvCreateImage (cvGetSize (dst), 8, 1);
cvNamedWindow( "original1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "resultat", CV_WINDOW_AUTOSIZE );
height = monoImg->height;
width = monoImg->width;
step = monoImg->widthStep/sizeof(uchar);
data = (uchar *)monoImg->imageData;
stepResultat = resultat->widthStep/sizeof(uchar);
dataResultat = (uchar *)resultat->imageData;
hSerial = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (hSerial == INVALID_HANDLE_VALUE)
{
if (GetLastError() == ERROR_FILE_NOT_FOUND)
{
printf("Serial port does not exist.\n");
}
else
{
printf("Other error.\n");
}
exit(1);
}
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams))
{
printf("Error getting serial port state.\n");
}
dcbSerialParams.BaudRate = CBR_9600;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (!SetCommState(hSerial, &dcbSerialParams))
{
printf("Error setting serial port state.\n");
}
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutConstant = 250;
timeouts.ReadTotalTimeoutMultiplier = 1;
timeouts.WriteTotalTimeoutConstant = 25;
timeouts.WriteTotalTimeoutMultiplier = 1;
if (!SetCommTimeouts(hSerial, &timeouts))
{
printf("Error setting timeouts.\n");
}
while( 1 )
{
img = cvQueryFrame( capture );
IplImage* dst = cvCreateImage(
cvSize(
img->width * percent / 100,
img->height * percent / 100),
img->depth,
img->nChannels
);
cvResize(img, dst, CV_INTER_LINEAR);
cvCvtColor(dst,monoImg,CV_RGB2GRAY);
clrscr();
i= height/2;
gotoxy(35,10);
if (CON_1!=0)
{
rpm=(unsigned int)((POS_X/CON_1)*255/width);
gotoxy(37,12);
printf("%i",rpm);
if(rpm<102) {
if (!WriteFile(hSerial,(unsigned char *)(&SENTIT), 1, &dwBytesTrans, NULL))
{
printf("Error sending LSB RPM.\n");
}
}
else if ((rpm>=102)&&(rpm<=153)) {
if (!WriteFile(hSerial,(unsigned char *)(&SENTIT)+1, 1, &dwBytesTrans, NULL))
{
printf("Error sending LSB RPM.\n");
}
}
else if(rpm>153) {
if (!WriteFile(hSerial, (unsigned char *)(&SENTIT)+2, 1, &dwBytesTrans, NULL))
{
printf("Error sending LSB RPM.\n");
}
}
}
POS_X=0;
CON_1=0;
for(j=0;j<width;j++)>
{
if (data[i*step+j] > 200) {
dataResultat[i*stepResultat+j]=255;
CON_1++;
POS_X=POS_X+j;
}
else
{
dataResultat[i*stepResultat+j]=0;
}
}
cvShowImage( "original1", monoImg );
cvShowImage( "resultat", resultat );
if( (cvWaitKey(10) & 255) == 27 ) break; }
cvReleaseCapture( &capture );
cvDestroyWindow( "original" );
cvDestroyWindow( "resultat" );
cvReleaseImage(&monoImg);
cvReleaseImage(&resultat);
CloseHandle(hSerial);
return 0;
}