void ImageAnalysis::AnalysisImage(IplImage *nw)
{
    double minx,maxy,maxx,miny,time;
    IplImage* rf=cvCreateImage(cvSize(720,576),nw->depth,nw->nChannels);
    IplImage* prevrf=cvCreateImage(cvSize(720,576),prev->depth,prev->nChannels);
    cvCopy(nw,rf);
    cvCopy(prev,prevrf);
    time=clock();
    for(int i=0;i<ZoneNum;i++)
    {
        minx=fmin(fmin(ParkRegionCoord[i][0].x,ParkRegionCoord[i][1].x),fmin(ParkRegionCoord[i][2].x,ParkRegionCoord[i][3].x));
        maxy=fmax(fmax(ParkRegionCoord[i][0].y,ParkRegionCoord[i][1].y),fmax(ParkRegionCoord[i][2].y,ParkRegionCoord[i][3].y));
        miny=fmin(fmin(ParkRegionCoord[i][0].y,ParkRegionCoord[i][1].y),fmin(ParkRegionCoord[i][2].y,ParkRegionCoord[i][3].y));
        maxx=fmax(fmax(ParkRegionCoord[i][0].x,ParkRegionCoord[i][1].x),fmax(ParkRegionCoord[i][2].x,ParkRegionCoord[i][3].x));
        cvSetImageROI(rf,cvRect(minx,miny,maxx-minx,maxy-miny));
        cvSetImageROI(prevrf,cvRect(minx,miny,maxx-minx,maxy-miny));

        rf=maskImage(rf,i);
        prevrf=maskImage(prevrf,i);
        HashCompare(rf,prevrf);
        MakeDecision(HashCompare(rf,prevrf),HistogramCompare(rf,prevrf),ImageDiff(rf,prevrf),i);

        cvResetImageROI(prevrf);
        cvResetImageROI(rf);
        cvCopy(nw,rf);
        cvCopy(prev,prevrf);
    }
    cvReleaseImage(&rf);
    cvReleaseImage(&prevrf);
    cvCopy(nw,prev);//болван, незабывай, что в opencv копируется указатель, если не делать cvCopy
    qDebug()<<"Time to compute:"<<(clock()-time)/CLOCKS_PER_SEC;
}
Esempio n. 2
0
/*
 * Use Monte Carlo simulation to determine the best action to take
 * ai: the AI that is predicting the best action
 * return: a string representation of the best action to take
 */
char *GetBestAction(PokerAI *ai)
{
    double winprob;
    double potodds;
    double expectedgain;
    ai->games_won = 0;
    ai->games_simulated = 0;

    //Set the pot odds
    if (ai->game.call_amount > 0)
    {
        potodds = (double) ai->game.call_amount / (ai->game.call_amount + ai->game.current_pot);
    }
    else
    {
        //There is nothing to be lost by calling
        potodds = 1.0 / ai->game.num_playing;
    }

    //Set the rate of return
    winprob = GetWinProbability(ai);
    expectedgain = winprob / potodds;

    if (ai->loglevel >= LOGLEVEL_INFO)
    {
        fprintf(ai->logfile, "Win probability: %.2lf%%\n", winprob * 100);
        fprintf(ai->logfile, "Rate of return:  %.2lf\n", expectedgain);
    }

    ai->action.winprob = winprob;
    ai->action.expectedgain = expectedgain;

    MakeDecision(ai);
    return ActionGetString(&ai->action);
}
/*******************************************************************
 * Function Name: Check_if_Cntr_Carry
 * Return Type 	: int
 * Created On	: Jul 26, 2013
 * Created By 	: hrushi
 * Comments		: Checks if the given contour is a carry region
 * Arguments	: const Contour& Ctr
 *******************************************************************/
CarryContour DetectByPose::Check_if_Cntr_Carry( const Contour& Ctr, double& dLike ) const
{

	CarryContour RetCtr = Ctr;

	vector<double> lArmScore, rArmScore;
	pr_score LeftArm_Score 	= isArmCarry("lArm", Ctr, lArmScore);
	pr_score RightArm_Score = isArmCarry("rArm", Ctr, rArmScore);

	vector<double> vAllScores;
	std::copy(lArmScore.begin(), lArmScore.end(), std::back_inserter(vAllScores));
	std::copy(rArmScore.begin(), rArmScore.end(), std::back_inserter(vAllScores));

	pr_score FinalSore = MakeDecision(LeftArm_Score, RightArm_Score);

	RetCtr.SetCarryTypeNScore(FinalSore.first, FinalSore.second);
	RetCtr.SetAllScores(vAllScores);

	return RetCtr;

}
Esempio n. 4
0
void Enermy::action()
{
	bool b = Collision();
	MakeDecision(b);
	Catch();
}