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; }
/* * 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; }
void Enermy::action() { bool b = Collision(); MakeDecision(b); Catch(); }