int minPathSum(vector<vector<int>>& grid) {
     int m = grid.size();
     int n = grid[0].size();
     vector<int> minS(m*n);
     minS[0]=grid[0][0];
     for(int i=1; i<n; i++)
     minS[i] = minS[i-1]+grid[0][i];
     for(int j=1; j<m; j++)
     minS[j*n] = minS[(j-1)*n] + grid[j][0];
     
     for(int i=1; i<m; i++)
     for(int j=1; j<n; j++){
         minS[i*n+j] = std::min(minS[i*n+j-1],minS[(i-1)*n +j]) +grid[i][j]; 
     }
     
     return minS[m*n-1];
 }
Rect InputProcessing::getRightEyePosition(Mat frame, Rect facePosition) {
    Size minS((int)(facePosition.width*.15), (int)(facePosition.height*.15));
    Size maxS((int)(facePosition.width*.4), (int)(facePosition.height*.4));
    vector<Rect> eyes(1);
    facePosition.width /= 2;
    facePosition.height /= 2;
    facePosition.y += facePosition.height / 3;
    Mat  face(frame, facePosition);
    eyeCascade.detectMultiScale(face, eyes, 1.05, 3, CV_HAAR_FIND_BIGGEST_OBJECT,minS,maxS);
    if (eyes.size() == 0) {
        return  Rect(0,0,0,0);
    }
    eyes.at(0).x += facePosition.x;
    eyes.at(0).y += facePosition.y;
    //from empirical observations, cascades tend to crop right parts for both eyes, so we add width
    eyes.at(0).width += (int) ceil(eyes.at(0).width *.125);
    return eyes.at(0);
}
Exemplo n.º 3
0
bool ListBox::on_key (wchar_t key)
{
	Scroll::Info scroll_info = scroll_.get_info();
	switch (key) {
		case UP:
		case 'k':
			if (!select_any) {
				if (items.empty ()) {
					return false;
				}
				set_select (scroll_info.focus);
				return true;
			}
			else {
				if (items.size () == 0) {
					return false;
				}
				if (scroll_info.focus == 0) {
					return false;
				}
				set_select (scroll_info.focus - 1);
				return true;
			}

		case DOWN:
		case 'j':
			if (!select_any) {
				if (items.empty ()) {
					return false;
				}
				set_select (scroll_info.focus);
				return true;
			}
			else {
				if (items.size () == 0) {
					return false;
				}
				if (scroll_info.focus + 1 >= items.size ()) {
					return false;
				}
				set_select (scroll_info.focus + 1);
				return true;
			}

		case PAGEUP:
			if (items.size () == 0) {
				return false;
			}
			if (scroll_info.focus == 0) {
				return false;
			}
			set_select (maxS (0, scroll_info.focus - get_size().y + 1));
			return true;

		case PAGEDOWN:
			if (items.size () == 0) {
				return false;
			}
			if (scroll_info.focus + 1 >= items.size ()) {
				return false;
			}
			set_select (minS (scroll_info.focus + get_size().y - 1, items.size () - 1));
			return true;

		case HOME:
		case L'g':
		case L'0':
		case L'^':
			if (items.size () == 0) {
				return false;
			}
			set_select (0);
			return true;

		case END:
		case L'G':
		case L'$':
			if (items.size () == 0) {
				return false;
			}
			set_select (items.size () - 1);
			return true;

		case L' ':
			if (select_any) {
				return false;
			}
			else {
				set_select (scroll_info.focus);
				return true;
			}

		default:
			return false;
	}
	assert (false);
}