Esempio n. 1
0
int main(int argc, char** argv)
{
	if (argc == 1) {
		printf("Usage: %s <input> <config>\n", argv[0]);
		return 0;
	}

	char* filename = (argc > 1 ? argv[1] : (char*)"input.jpg");

	profile_name = (argc > 2 ? argv[2] : (char*)"blue_goal.yml");


	fs = cvOpenFileStorage(profile_name, 0, CV_STORAGE_READ, NULL);
	Hmax = cvReadIntByName(fs, NULL, "m_100", m_100);
	Hmax = cvReadIntByName(fs, NULL, "Hmax", Hmax);
	Smax = cvReadIntByName(fs, NULL, "Smax", Smax);
	Vmax = cvReadIntByName(fs, NULL, "Vmax", Vmax);
	Hmin = cvReadIntByName(fs, NULL, "Hmin", Hmin);
	Smin = cvReadIntByName(fs, NULL, "Smin", Smin);
	Vmin = cvReadIntByName(fs, NULL, "Vmin", Vmin);
	//minH = cvReadIntByName(fs, NULL, "minH", minH);

	printf("%s\n", filename);
	img = cvLoadImage(filename, 1);

	visy_img_alloc(&img, cvGetSize(img), 8, 1);
	imgThreshed = cvCreateImage(cvGetSize(img), 8, 1);

	//cvSmooth( imgHSV, imgHSV, CV_GAUSSIAN, 7, 7 );
	//cvInRangeS(imgHSV, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed);

	//cvInRangeS(imgHSV, cvScalar(100, 100, 100), cvScalar(120, 255, 255), imgThreshed);

	//cvInRangeS(imgHSV, cvScalar(0.11*256, 0.60*256, 0.20*256, 0),
	//                cvScalar(0.14*256, 1.00*256, 1.00*256, 0), imgThreshed);

	cvNamedWindow("origin", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("treshed", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("graph", CV_WINDOW_AUTOSIZE);


	cvCreateTrackbar("m_100", "treshed", &m_100, 255, onTrack);
	cvCreateTrackbar("Hmin", "treshed", &Hmin, 180, onTrack);
	cvCreateTrackbar("Smin", "treshed", &Smin, 255, onTrack);
	cvCreateTrackbar("Vmin", "treshed", &Vmin, 255, onTrack);

	cvCreateTrackbar("Hmax", "treshed", &Hmax, 180, onTrack);
	cvCreateTrackbar("Smax", "treshed", &Smax, 255, onTrack);
	cvCreateTrackbar("Vmax", "treshed", &Vmax, 255, onTrack);
	//cvCreateTrackbar("minH", "treshed", &minH, 255, onTrack);


	onTrack(0);

	//cvSaveImage("hsv.jpg", imgHSV);

	while(cvWaitKey(0) != 97);

	return 0;
}
Esempio n. 2
0
int main(int argc, char** argv)
{

	profile_name = (argc > 1 ? argv[1] : (char*)"blue_goal.yml");

	int cam = (argc > 2 ? atoi(argv[2]) : 0);

	// value loading
	fs = cvOpenFileStorage(profile_name, 0, CV_STORAGE_READ, NULL);
	Hmax = cvReadIntByName(fs, NULL, "Hmax", Hmax);
	Smax = cvReadIntByName(fs, NULL, "Smax", Smax);
	Vmax = cvReadIntByName(fs, NULL, "Vmax", Vmax);
	Hmin = cvReadIntByName(fs, NULL, "Hmin", Hmin);
	Smin = cvReadIntByName(fs, NULL, "Smin", Smin);
	Vmin = cvReadIntByName(fs, NULL, "Vmin", Vmin);
	minH = cvReadIntByName(fs, NULL, "minH", minH);


	cvNamedWindow("img", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("treshed", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("graph", CV_WINDOW_AUTOSIZE);


	cvCreateTrackbar("Hmin", "treshed", &Hmin, 360, onTrack);
	cvCreateTrackbar("Smin", "treshed", &Smin, 255, onTrack);
	cvCreateTrackbar("Vmin", "treshed", &Vmin, 255, onTrack);

	cvCreateTrackbar("Hmax", "treshed", &Hmax, 360, onTrack);
	cvCreateTrackbar("Smax", "treshed", &Smax, 255, onTrack);
	cvCreateTrackbar("Vmax", "treshed", &Vmax, 255, onTrack);
	cvCreateTrackbar("minH", "treshed", &minH, 255, onTrack);


	onTrack(0);

	CvCapture* camera = cvCaptureFromCAM(cam);


	while(1){
		img = cvQueryFrame(camera);

		allocateCvImage(&imgHSV, cvGetSize(img), 8, 3);
		cvCvtColor(img, imgHSV, CV_BGR2HSV);

		allocateCvImage(&imgThreshed, cvGetSize(img), 8, 1);
		cvInRangeS(imgHSV, cvScalar(Hmin, Smin, Vmin, 0), cvScalar(Hmax,
			Smax, Vmax, 0), imgThreshed);

		cvErode(imgThreshed, imgThreshed, 0, 2);


		int width = imgThreshed->width;
		int height = imgThreshed->height;
		int nchannels = imgThreshed->nChannels;
		int step = imgThreshed->widthStep;

		uchar* data = (uchar *)imgThreshed->imageData;
		unsigned int graph[width];

		int x,y;
		for(x = 0; x < width ; x++)
			graph[x] = 0;

		int sum = 0, notnull = 0;
		for(x = 0; x < width; x++){
			for( y = 0 ; y < height ; y++ ) {
				if(data[y*step + x*nchannels] == 255){
					graph[x]++;
				}
			}
			sum += graph[x];
			if(graph[x] != 0)
				notnull += 1;

	//		printf("%d\t%d\n", x, graph[x]);
		}
		if(notnull == 0)
			notnull = 1;
		int average = sum/notnull;
		if(average == 0)
			average = 1;
		float pix = 12.0/average;

		printf("\n sum: %d average: %d\n",sum,average);


		int first = 0, last = 0;
		// looking for goal
		for(x = 0;x < width; x++){
			if(graph[x] >= average && graph[x-1] < average){
				cvLine(img, cvPoint(x, 0), cvPoint(x, height),
					cvScalar(255, 255, 0, 0), 1, 0, 0);
				if(first == 0)
					first = x;
			}
			if(graph[x] >= average && graph[x+1] < average){
				cvLine(img, cvPoint(x, 0), cvPoint(x, height),
					cvScalar(255, 255, 0, 0), 1, 0, 0);
				last = x;
			}
		}

		float goal = pix*(last-first);
		float error = (goal-60.0)/60.0*100.0;

		printf("Pix: %f; Goal in cm: %f; Error: %f%\n", pix, goal, error);

		// image center
		cvLine(img, cvPoint(width/2, 0), cvPoint(width/2, height),
			cvScalar(0, 255, 255, 0), 1, 0, 0);

		int gCenter = (last+first) / 2;

		// X
		float X = ((width/2) - gCenter)*pix;

		printf("X: %f +- %f\n",X, abs(error)/100.0*X);

		// goal center
		cvLine(img,cvPoint(gCenter, 0),cvPoint(gCenter, height),
			cvScalar(0, 0, 255, 0), 1, 0, 0);



		cvShowImage("img", img);
		cvShowImage("treshed", imgThreshed);
		//cvShowImage("graph", imgGraph);

		cvWaitKey(10);
	}


}
Esempio n. 3
0
INT_PTR Twindow::msgProc(UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg) {
        case WM_INITDIALOG:
            resizeDialog();
            init();
            //subClass();
            break;
        case WM_DESTROY: {
            THWNDs wnds;
            getChildWindows(m_hwnd,wnds);
            for (THWNDs::const_iterator wnd=wnds.begin(); wnd!=wnds.end(); wnd++) {
                ::Twidget *item=Twidget::getDlgItem(*wnd);
                if (item) {
                    item->restore();
                    delete item;
                }
            }
            ::Twidget *item=Twidget::getDlgItem(m_hwnd);
            if (item) {
                item->restore();
                delete item;
            }
            if (red) {
                DeleteObject(red);
            }
            red=NULL;
            break;
        }
        case WM_HSCROLL:
            if (onTrack(bindsHtrack,lParam)) {
                return TRUE;
            }
            break;
        case WM_VSCROLL:
            if (onTrack(bindsVtrack,lParam)) {
                return TRUE;
            }
            break;
        case WM_COMMAND: {
            if (bindsCheckbox)
                for (int i=0; bindsCheckbox[i].idc; i++)
                    if (bindsCheckbox[i].idc==LOWORD(wParam)) {
                        if (bindsCheckbox[i].idff<0) {
                            cfgSet(-bindsCheckbox[i].idff,!getCheck(LOWORD(wParam)));
                        } else {
                            cfgSet(bindsCheckbox[i].idff,getCheck(LOWORD(wParam)));
                        }
                        if (bindsCheckbox[i].onClick) {
                            (this->*bindsCheckbox[i].onClick)();
                        }
                        return TRUE;
                    }
            if (bindsRadiobutton)
                for (int i=0; bindsRadiobutton[i].idc; i++)
                    if (bindsRadiobutton[i].idc==LOWORD(wParam) && getCheck(LOWORD(bindsRadiobutton[i].idc))) {
                        cfgSet(bindsRadiobutton[i].idff,bindsRadiobutton[i].val);
                        if (bindsRadiobutton[i].onClick) {
                            (this->*bindsRadiobutton[i].onClick)();
                        }
                        return TRUE;
                    }
            if (bindsButton)
                if (HIWORD(wParam)==BN_CLICKED) // works also for static
                    for (int i=0; bindsButton[i].idc; i++)
                        if (bindsButton[i].idc==LOWORD(wParam) && bindsButton[i].onClick) {
                            (this->*bindsButton[i].onClick)();
                            return TRUE;
                        }
            if (HIWORD(wParam)==EN_CHANGE && !isSetWindowText) {
                if (LOWORD(wParam)==IDC_ED_HELP && tr->translateMode) {
                    onEditChange();
                }
                if (bindsEditInt)
                    for (int i=0; bindsEditInt[i].idc; i++)
                        if (bindsEditInt[i].idc==LOWORD(wParam)) {
                            HWND hed=GetDlgItem(m_hwnd,bindsEditInt[i].idc);
                            if (hed!=GetFocus()) {
                                return FALSE;
                            }
                            repaint(hed);
                            eval(hed,bindsEditInt[i].min,bindsEditInt[i].max,bindsEditInt[i].idff);
                            if (bindsEditInt[i].onClick) {
                                (this->*bindsEditInt[i].onClick)();
                            }
                            return TRUE;
                        }
                if (bindsEditReal)
                    for (int i=0; bindsEditReal[i].idc; i++)
                        if (bindsEditReal[i].idc==LOWORD(wParam)) {
                            HWND hed=GetDlgItem(m_hwnd,bindsEditReal[i].idc);
                            if (hed!=GetFocus()) {
                                return FALSE;
                            }
                            repaint(hed);
                            eval(hed,bindsEditReal[i].min,bindsEditReal[i].max,bindsEditReal[i].idff,bindsEditReal[i].mult);
                            if (bindsEditReal[i].onClick) {
                                (this->*bindsEditReal[i].onClick)();
                            }
                            return TRUE;
                        }
            } else if (HIWORD(wParam)==CBN_SELCHANGE) {
                if (bindsCombobox)
                    for (int i=0; bindsCombobox[i].idc; i++)
                        if (bindsCombobox[i].idc==LOWORD(wParam)) {
                            switch (bindsCombobox[i].mode) {
                                case BINDCBX_DATA:
                                    cfgSet(bindsCombobox[i].idff,(int)cbxGetCurItemData(bindsCombobox[i].idc));
                                    break;
                                case BINDCBX_SEL:
                                    cfgSet(bindsCombobox[i].idff,cbxGetCurSel(bindsCombobox[i].idc));
                                    break;
                                case BINDCBX_TEXT:
                                    cfgSet(bindsCombobox[i].idff,cbxGetCurText(bindsCombobox[i].idc));
                                    break;
                                case BINDCBX_DATATEXT:
                                    cfgSet(bindsCombobox[i].idff,(const char_t*)cbxGetCurItemData(bindsCombobox[i].idc));
                                    break;
                            }
                            if (bindsCombobox[i].onClick) {
                                (this->*bindsCombobox[i].onClick)();
                            }
                            return TRUE;
                        }
            }
            break;
        }
        case WM_CTLCOLOREDIT:
            if (bindsEditInt)
                if (onCtlColorEdit(bindsEditInt,lParam,wParam)) {
                    return INT_PTR(getRed());
                }
            if (bindsEditReal)
                if (onCtlColorEdit(bindsEditReal,lParam,wParam)) {
                    return INT_PTR(getRed());
                }
            break;
    }
    return defMsgProc(uMsg,wParam,lParam);
}