示例#1
0
int FilterManagerTEST::T_applyFilterChain() {
    int fail = 0;
    logger->trace("==============================");

    logger->trace("Testing applyFilterChain():");
    logger->trace(" Creating FM under normal mode...");
    FilterManager* fm = new FilterManager("fm");
    logger->trace(" Using factory, making 4 random filters...");
    Filter* f1,*f2,*f3,*f4;
    f1 = FilterFactory::createFilter();
    f2 = FilterFactory::createNullImgFilter();
    f3 = FilterFactory::createNullFPGAFilter();
    f4 = FilterFactory::createFilter();
    logger->trace(" Inserting f1 as \"task 3\" to FRONT...");
    fm->insertFilter("task 3",f1,"FRONT");
    logger->trace(" Inserting f2 as \"task 1\"...");
    fm->insertFilter("task 1",f2,"task 3");
    logger->trace(" Inserting f3 as \"task 2\" between f1,f2...");
    fm->insertFilter("task 2",f3,"task 3");
    logger->trace(" Inserting f4 as \"task 4\" to REAR...");
    fm->insertFilter("task 4",f4);
    logger->trace(" Making img objs...");
    cv::Mat img = cv::Mat::zeros(2,2,CV_8UC1);
    ImgData* data = new ImgData("input",img);
    logger->trace(" Applying all filters...");
    int res = fm->applyFilterChain(data);
    logger->trace("  Checking data ID...");
    logger->trace("    "+data->getID());
    if (data->getID() == "fm")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, ID not set!");
        fail++;
    }
    logger->trace("    "+data->getTrack()+"error code "+std::to_string(res));
    if (data->getTrack() == "task 1; task 2-1; task 3; task 4; ")
        if (res == 1)
            logger->trace("    ok");
        else {
            logger->warn("    NOT ok, error code incorrect");
        }
    else {
        logger->warn("    NOT ok, track record not expected");
    }
    img.release();
    delete data;
    delete fm;
    logger->trace("Testing complete.");

    if (fail > 0)
        logger->warn("  TEST FAILED: applyFilterChain");
    logger->trace("==============================");
    return fail;
}
示例#2
0
int FilterManagerTEST::T_replaceFilter() {
    int fail = 0;
    logger->trace("==============================");

    logger->trace("Testing replaceFilter():");
    logger->trace(" Test under custom ID mode...");
    FilterManager* fm = new FilterManager("fm");
    logger->trace("  Using factory, making 4 general filters...");
    Filter* f1,*f2,*f3,*f4,*f5,*f6,*f7,*f8;
    f1 = FilterFactory::createFilter();
    f2 = FilterFactory::createFilter();
    f3 = FilterFactory::createFilter();
    f4 = FilterFactory::createFilter();
    f5 = FilterFactory::createNullImgFilter();
    f6 = FilterFactory::createNullFPGAFilter();
    f7 = FilterFactory::createFilter();
    f8 = FilterFactory::createFilter();
    logger->trace("  Inserting f1 as \"task 3\" to FRONT...");
    fm->insertFilter("task 3",f1,"FRONT");
    logger->trace("  Inserting f2 as \"task 1\"...");
    fm->insertFilter("task 1",f2,"task 3");
    logger->trace("  Inserting f3 as \"task 2\" between f1,f2...");
    fm->insertFilter("task 2",f3,"task 3");
    logger->trace("  Inserting f4 as \"task 4\" to REAR...");
    fm->insertFilter("task 4",f4);
    logger->trace("  Replacing \"task 3\" with f5 under key \"task 5\"...");
    fm->replaceFilter("task 5",f5,"task 3");
    logger->trace("  Replacing \"FRONT\" with f2 under key \"task 6\"...");
    fm->replaceFilter("task 6",f6,"FRONT");
    logger->trace("  Using getFilterChainIDs()...");
    std::vector<std::string> list = fm->getFilterChainIDs();
    std::string res;
    for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++)
        res += " "+*it;
    logger->trace("   "+res);
    if (res == " task 6 task 2 task 5 task 4")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, list unexpected");
        fail += 1;
    }
    logger->trace("  Try replacing w/ non unique ID...");
    res = std::to_string(fm->replaceFilter("task 5",f7,"task 5"));
    logger->trace("    error code: "+res);
    if (res == "2")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    logger->trace("  Try replacing out of range...");
    res = std::to_string(fm->replaceFilter("task 8",f8,"what task?"));
    logger->trace("    error code: "+res);
    if (res == "1")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    logger->trace("  Try replacing using auto ID mode...");
    res = std::to_string(fm->replaceFilter(f8,"task 2"));
    logger->trace("    error code: "+res);
    if (res == "4")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    delete fm;
    delete f7;
    delete f8;

    logger->trace(" Test under auto ID mode...");
    fm = new FilterManager("fm",1);
    logger->trace("  Using factory...");
//	Filter* f1,*f2,*f3,*f4,*f5,*f6,*f7,*f8;
    f1 = FilterFactory::createFilter();
    f2 = FilterFactory::createFilter();
    f3 = FilterFactory::createFilter();
    f4 = FilterFactory::createFilter();
    f5 = FilterFactory::createNullImgFilter();
    f6 = FilterFactory::createNullFPGAFilter();
    f7 = FilterFactory::createFilter();
    f8 = FilterFactory::createFilter();
    logger->trace("  Inserting f1 to FRONT...");
    fm->insertFilter(f1,"FRONT");
    logger->trace("  Inserting f2...");
    fm->insertFilter(f2);
    logger->trace("  Inserting f3 between f1,f2...");
    fm->insertFilter(f3,"2 GenericFilter");
    logger->trace("  Inserting f4 to REAR...");
    fm->insertFilter(f4,"REAR");
    logger->trace("  Replacing \"2 GenericFilter\" with f5...");
    fm->replaceFilter(f5,"2 GenericFilter");
    logger->trace("  Replacing \"FRONT\" with f6...");
    fm->replaceFilter(f6,"FRONT");
    logger->trace("  Using getFilterChainIDs()...");
    list = fm->getFilterChainIDs();
    res = "";
    for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++)
        res += " "+*it;
    logger->trace("   "+res);
    if (res == " 6 NullFPGAFilter 3 GenericFilter 5 NullImgFilter 4 GenericFilter")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, list unexpected");
        fail += 1;
    }
    logger->trace("  Try replacing out of range...");
    res = std::to_string(fm->insertFilter(f7,"what task?"));
    logger->trace("    error code: "+res);
    if (res == "1")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    delete fm;
    delete f7;
    delete f8;
    logger->trace("Testing complete.");

    if (fail > 0)
        logger->warn("  TEST FAILED: replaceFilter()");
    logger->trace("==============================");
    return fail;
}
示例#3
0
int FilterManagerTEST::T_insertFilter() {
    int fail = 0;
    logger->trace("==============================");

    logger->trace("Testing insertFilter():");
    logger->trace(" Test under custom ID mode...");
    FilterManager* fm = new FilterManager("fm");
    logger->trace("  Using factory, making 4 general filters...");
    Filter* f1,*f2,*f3,*f4,*f5;
    f1 = FilterFactory::createFilter();
    f2 = FilterFactory::createFilter();
    f3 = FilterFactory::createFilter();
    f4 = FilterFactory::createFilter();
    f5 = FilterFactory::createFilter();
    logger->trace("  Inserting f1 as \"task 3\" to FRONT...");
    fm->insertFilter("task 3",f1,"FRONT");
    logger->trace("  Inserting f2 as \"task 1\"...");
    fm->insertFilter("task 1",f2,"task 3");
    logger->trace("  Inserting f3 as \"task 2\" between f1,f2...");
    fm->insertFilter("task 2",f3,"task 3");
    logger->trace("  Inserting f4 as \"task 4\" to REAR...");
    fm->insertFilter("task 4",f4);
    logger->trace("  Using getFilterChainIDs()...");
    std::vector<std::string> list = fm->getFilterChainIDs();
    std::string res;
    for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++)
        res += " "+*it;
    logger->trace("   "+res);
    if (res == " task 1 task 2 task 3 task 4")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, list unexpected");
        fail += 1;
    }
    logger->trace("  Try inserting w/ non unique ID...");
    res = std::to_string(fm->insertFilter("task 2",f5));
    logger->trace("    error code: "+res);
    if (res == "2")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    logger->trace("  Try inserting out of range...");
    res = std::to_string(fm->insertFilter("task 2",f5,"what task?"));
    logger->trace("    error code: "+res);
    if (res == "1")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    logger->trace("  Try inserting with no filterID arg...");
    res = std::to_string(fm->insertFilter(f5,"Task 2"));
    logger->trace("    error code: "+res);
    if (res == "4")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    delete f5;
    delete fm;

    logger->trace(" Test under auto ID mode...");
    fm = new FilterManager("fm",1);
    logger->trace("  Using factory, making 4 general filters...");
    f1 = FilterFactory::createFilter();
    f2 = FilterFactory::createFilter();
    f3 = FilterFactory::createFilter();
    f4 = FilterFactory::createFilter();
    f5 = FilterFactory::createFilter();
    logger->trace("  Inserting f1 to FRONT...");
    fm->insertFilter(f1,"FRONT");
    logger->trace("  Inserting f2...");
    fm->insertFilter(f2);
    logger->trace("  Inserting f3 between f1,f2...");
    fm->insertFilter(f3,"2 GenericFilter");
    logger->trace("  Inserting f4 to REAR...");
    fm->insertFilter(f4,"REAR");
    res = "";
    logger->trace("  Using getFilterChainIDs()...");
    list = fm->getFilterChainIDs();
    for (std::vector<std::string>::iterator it = list.begin(); it != list.end(); it++)
        res += " "+*it;
    logger->trace("   "+res);
    if (res == " 1 GenericFilter 3 GenericFilter 2 GenericFilter 4 GenericFilter")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, list unexpected");
        fail += 1;
    }
    logger->trace("  Try inserting w/ custom ID...");
    res = std::to_string(fm->insertFilter("task 2",f5));
    logger->trace("    error code: "+res);
    if (res == "0")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    logger->trace("  Try inserting out of range...");
    res = std::to_string(fm->insertFilter(f5,"what task?"));
    logger->trace("    error code: "+res);
    if (res == "1")
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, incorrect error");
        fail += 1;
    }
    logger->trace("Testing complete.");
    delete fm;

    if (fail > 0)
        logger->warn("  TEST FAILED: insertFilter()");
    logger->trace("==============================");
    return fail;
}
示例#4
0
int RGBFilterTEST::T_filter() {
	int fail = 0;
    logger->trace("==============================");

    logger->trace("Testing filter():");

//	logger->trace(" Using imread...");
//	cv::Mat img = cv::imread("rgb_mode_0.jpg",CV_LOAD_IMAGE_COLOR);
//	if (! img.data)
//		logger->warn(" OH NO, img not read");

    logger->trace(" Using camCap...");
    ImgDataTEST* imgTest = new ImgDataTEST();
    cv::Mat img = imgTest->camCap();
	cvDestroyWindow("camCap");
    logger->trace(" Loading test image into a ImgData wrapper...");
    ImgData* testImg = new ImgData("raw",img);
    logger->trace(" Copying ImgData to second wrapper...");
    ImgData* testImg2 = new ImgData(*testImg);
    logger->trace(" Showing one copy of test image (should be named \"raw\")...");
	testImg->showImg();

    logger->trace(" Filtering first data w/ full luminosity specturm, aka mode 0...");
    logger->trace("  Init int arr[3]...");
	int arr[] = {25,-15,-20};
    logger->trace("  Using filter factory, create mode 0 filter...");
	RGBFilter* rgbFilter = new RGBFilter(arr);//(RGBFilter*)FilterFactory::createRGBFilter(arr);
    logger->trace("  Creating filter manager w/ id \"RGBFilter MODE 0\"...");
	FilterManager* fm = new FilterManager("RGBFilter MODE 0");
    logger->trace("  Inserting filter as \"rgb mode 0\"...");
	fm->insertFilter("rgb mode 0",rgbFilter);
    logger->trace("  Attempt filtering using filter manager...");
	fm->applyFilterChain(testImg);
    logger->trace("  Showing filtered test image...");
	testImg->showImg();
    logger->trace("   Expect 2 windows, \"raw\" and \"RGBFilter MODE 0\", the latter should be red shifted");
    logger->trace("   If true, hit space, else hit esc");
	char key;
	while (1) {
		key = cvWaitKey(0);
		if (char(key) == 32) {
            logger->trace("    ok");
				break;
		}
		else if (char(key) == 27) {
            logger->warn("    NOT ok, details of output under mode 0 not correct");
			fail++;
			break;
		}
	}

    logger->trace(" Filtering data 2 w/ 3 zones of luminosity separately, aka mode 1...");
    logger->trace("  Init int high[3],mid[3],shad[3]...");
	int high[] = {255,255,255};
	int mid[] = {50,-30,-30};
	int shad[]	= {-255,-255,-255};
    logger->trace("  Using filter factory, create mode 1 filter...");
	RGBFilter* rgbFilter2 = new RGBFilter(high,mid,shad);//(RGBFilter*)FilterFactory::createRGBFilter(high,mid,shad);
    logger->trace("  Creating filter manager w/ id \"RGBFilter MODE 1\"...");
	FilterManager* fm2 = new FilterManager("RGBFilter MODE 1");
    logger->trace("  Inserting filter as \"rgb mode 1\"...");
	fm2->insertFilter("rgb mode 1",rgbFilter2);
    logger->trace("  Attempt filtering using filter manager...");
	fm2->applyFilterChain(testImg2);
    logger->trace("  Showing filtered test image...");
	testImg2->showImg();
    logger->trace("   Expect 3 windows in total, \"raw\" and \"RGBFilter MODE 0\" and \"RGBFilter MODE 1\", the latter should be red shifted, but a bit differently");
    logger->trace("   If true, hit space, else hit esc");
	while (1) {
		key = cvWaitKey(0);
		if (char(key) == 32) {
            logger->trace("    ok");
				break;
		}
		else if (char(key) == 27) {
            logger->warn("    NOT ok, details of output under mode 1 not correct");
			fail++;
			break;
		}
	}

	delete fm;
	delete fm2;
	cvDestroyWindow("raw");
	testImg->closeImg();
	testImg2->closeImg();
    delete testImg;
    delete testImg2;
    img.release();

	if (fail > 0)
        logger->warn("  TEST FAILED: filter()");
    logger->trace("==============================");
	return fail;
}