bool _Bullseye::getCircleCenter(vDouble3* pCenter) { NULL_F(pCenter); NULL_F(m_pStream); //Use num instead of m_numCircle to avoid multi-thread inconsistancy int num = m_numCircle; if(num==0)return false; int i; vDouble3* pMarker = &m_pCircle[0]; vDouble3* pCompare; int camCenter = (m_pStream->m_width+m_pStream->m_height)/2; //Find the closest point for(i=1; i<num; i++) { pCompare = &m_pCircle[i]; if(abs(pCompare->m_x + pCompare->m_y - camCenter) < abs(pMarker->m_x + pMarker->m_y - camCenter)) { pMarker = pCompare; } } pCenter->m_x = pMarker->m_x; pCenter->m_y = pMarker->m_y; pCenter->m_z = pMarker->m_z; return true; }
bool _Automaton::transit(string* pNextStateName) { NULL_F(pNextStateName); int iNext = getStateIdx(pNextStateName); CHECK_F(iNext<0); m_iState = iNext; return true; }
bool _ROITracker::link(void) { NULL_F(m_pKiss); Kiss* pK = (Kiss*)m_pKiss; //link instance string iName = ""; F_ERROR_F(pK->v("_Stream",&iName)); m_pStream = (_StreamBase*)(pK->root()->getChildInstByName(&iName)); //TODO: link variables to Automaton return true; }
bool HM_follow::draw(Frame* pFrame, vInt4* pTextPos) { NULL_F(pFrame); Mat* pMat = pFrame->getCMat(); putText(*pMat, "HM: rpmL=" + i2str(m_pHM->m_motorPwmL) + ", rpmR=" + i2str(m_pHM->m_motorPwmR), cv::Point(pTextPos->m_x, pTextPos->m_y), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 1); pTextPos->m_y += pTextPos->m_w; CHECK_T(m_pTarget==NULL); circle(*pMat, Point(m_pTarget->m_bbox.midX(), m_pTarget->m_bbox.midY()), 10, Scalar(0, 0, 255), 2); return true; }
bool RC_visualFollow::draw(void) { CHECK_F(!this->ActionBase::draw()); Window* pWin = (Window*)this->m_pWindow; Mat* pMat = pWin->getFrame()->getCMat(); NULL_F(m_pROITracker); Rect2d roi; // draw the tracked object if (m_bSelect) { roi = getMouseROI(m_ROI); if (roi.height > 0 || roi.width > 0) { rectangle(*pMat, roi, Scalar(0, 255, 0), 2); } } else if (m_pROITracker->m_bTracking) { roi = m_pROITracker->m_ROI; if (roi.height > 0 || roi.width > 0) { rectangle(*pMat, roi, Scalar(0, 0, 255), 2); } } if (m_ROImode == MODE_ASSIST) { m_pUIassist->draw(); } else if (m_ROImode == MODE_DRAWRECT) { m_pUIdrawRect->draw(); } circle(*pMat, Point(m_roll.m_targetPos, m_pitch.m_targetPos), 50, Scalar(0, 255, 0), 2); return true; }
bool _Universe::draw(Frame* pFrame, vInt4* pTextPos) { NULL_F(pFrame); Mat* pMat = pFrame->getCMat(); putText(*pMat, "Universe FPS: " + i2str(getFrameRate()), cv::Point(pTextPos->m_x, pTextPos->m_y), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 1); pTextPos->m_y += pTextPos->m_w; OBJECT* pObj; Scalar color; double thickness; for (int i = 0; i < m_nObj; i++) { pObj = &m_pObj[i]; if (pObj->m_frameID <= 0)continue; color = Scalar(0, 255, 0); thickness = 1; Rect bbox; bbox.x = pObj->m_bbox.m_x; bbox.y = pObj->m_bbox.m_y; bbox.width = pObj->m_bbox.m_z - pObj->m_bbox.m_x; bbox.height = pObj->m_bbox.m_w - pObj->m_bbox.m_y; rectangle(*pMat, bbox, color, thickness); if(pObj->m_iClass >= m_nObjClass)continue; putText(*pMat, m_pObjClass[pObj->m_iClass].m_name, Point(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2), FONT_HERSHEY_SIMPLEX, 0.8, color, thickness); } return true; }
bool _Universe::link(void) { NULL_F(m_pKiss); return true; }