Пример #1
0
int ImgDataTEST::T_Constructor() {
	int fail = 0;
    logger->trace("==============================");

    logger->trace("Testing Constructor:");
    logger->trace(" Init Mat obj using camCap()...");
    logger->trace(" Showing capped img...");
	cv::Mat img = ImgDataTEST::camCap();
    logger->trace(" Constructing new ImgData obj with arg \"data\" and Mat obj...");
    ImgData* data = new ImgData("data", img);
    logger->trace(" Complete.");
    logger->trace(" Checking initialized variables...");
    logger->trace("  Using getID()...");
	if (data->getID() == "data")
        logger->trace("    ok");
	else {
        logger->warn("    NOT ok, ID initialization incorrect");
		fail += 1;
	}
    logger->trace("  Using showImg()...");
    logger->trace("  If both imgs are identical press spacebar, else press esc...");
	data->showImg();
	char key;
	while (1) {
 		key = cvWaitKey(0);
		if (char(key) == 32) {
            logger->trace("    ok");
			break;
		}
		else if (char(key) == 27) {
            logger->warn("    NOT ok, img not same");
			fail++;
			break;
		}
	}
//	logger->trace(" Using getImg() and comparing...");
	//TODO
    logger->trace("Test complete.");
    logger->trace("Closing windows...");
	data->closeImg();
	cvDestroyWindow("camCap");
    logger->trace("Deleting data...");
	delete data;

	if (fail > 0)
        logger->warn("  TEST FAILED: Data Constructor");
    logger->trace("==============================");
	return fail;
}
Пример #2
0
int ImgDataTEST::T_setImg() {
	int fail = 0;
    logger->trace("==============================");

    logger->trace("Testing setImg():");
    logger->trace(" Creating 2 Mat obj using camCap()...");
    cv::Mat test = camCap();
    cvDestroyWindow("camCap");
    cv::Mat test2 = camCap();
    cvDestroyWindow("camCap");
    cv::namedWindow("obj 1");
    cv::imshow("obj 1",test);
    cv::namedWindow("obj 2");
    cv::imshow("obj 2",test2);
    logger->trace("  Accessing refcount...");
    int t1rc,t2rc,imgrc;
    t1rc = test.u->refcount;
    t2rc = test2.u->refcount;
    logger->trace("    Obj 1 refcount: "+StringTools::intToStr(t1rc));
    logger->trace("    Obj 2 refcount: "+StringTools::intToStr(t2rc));
    if (t1rc+t2rc==2)
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, refcount should be 1 for both");
    	fail++;
    }
    logger->trace(" Creating ImgData with obj 1...");
    ImgData* testImg = new ImgData("plswork", test);
    logger->trace("  Accessing refcount...");
    t1rc = test.u->refcount;
    t2rc = test2.u->refcount;
    imgrc = testImg->img.u->refcount;
    logger->trace("    Obj 1 refcount: "+StringTools::intToStr(t1rc));
    logger->trace("    Obj 2 refcount: "+StringTools::intToStr(t2rc));
    if (t1rc == 2) {
    	if (imgrc == 2) {
    		if(t2rc == 1)
                logger->trace("    ok");
    		else {
                logger->warn("    NOT ok, obj 2 refcount should be 1");
    			fail++;
    		}
    	}
    	else {
            logger->warn("    NOT ok, obj 1 refcount disagree");
    		fail++;
    	}
    } else {
        logger->warn("    NOT ok, obj 1 refcount should be 2");
    	fail++;
    }
    logger->trace(" Try showImg(), expect photo to be as same as obj 1...");
    logger->trace(" If true, hit space, else hit esc...");
    testImg->showImg();
    char key;
    while (1) {
    	key = cvWaitKey(0);
    	if (char(key) == 32) {
            logger->trace("    ok");
    		break;
    	}
    	else if (char(key) == 27) {
            logger->warn("    NOT ok, img not expected");
    		fail++;
    		break;
    	}
    }
    logger->trace(" Setting obj 2 to img...");
    testImg->setImg(test2);
    logger->trace("  Accessing refcount...");
    t1rc = test.u->refcount;
    t2rc = test2.u->refcount;
    logger->trace("    Obj 1 refcount: "+StringTools::intToStr(t1rc));
    logger->trace("    Obj 2 refcount: "+StringTools::intToStr(t2rc));
    if (t1rc==1 && t2rc==2)
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, refcount should be 1 for obj 1 and 2 for obj 2");
    	fail++;
    }
    logger->trace(" Release obj 2 from outside ImgData...");
    test2.release();
    logger->trace(" Try showImg(), expect photo to be as same as obj 2...");
    testImg->showImg();
    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, img not expected");
    		fail++;
    		break;
    	}
    }
    logger->trace("  Accessing refcount...");
    t1rc = test.u->refcount;
    imgrc = testImg->img.u->refcount;
    logger->trace("    Obj 1 refcount: "+StringTools::intToStr(t1rc));
    logger->trace("    Obj 2 refcount: "+StringTools::intToStr(imgrc));
    if (t1rc+imgrc==2)
        logger->trace("    ok");
    else {
        logger->warn("    NOT ok, refcount should be 1 for both");
    	fail++;
    }
    logger->trace(" Deleting ImgData...");
    delete testImg;
    logger->trace(" Release obj 1...");
    test.release();
    cv::destroyWindow("obj 1");
    cv::destroyWindow("obj 2");

	if (fail > 0)
        logger->warn("  TEST FAILED: setImg()");
    logger->trace("==============================");
	return fail;
}
Пример #3
0
int ImgDataTEST::T_cpConstructor() {
	int fail = 0;
    logger->trace("==============================");

    logger->trace("Testing Copy Constructor:");
    logger->trace(" Using camCap() to get Mat obj...");
	cv::Mat img = ImgDataTEST::camCap();
	cvDestroyWindow("camCap");
    logger->trace(" Constructing new ImgData obj with arg \"data\" and Mat obj...");
    ImgData* data = new ImgData("data",img);
    logger->trace(" Setting Msg to \"SubZero rox\"...");
	data->setMsg("SubZero rox");
    logger->trace(" Invoking Copy Constructor...");
    ImgData* copy = new ImgData(*data);
    logger->trace(" Checking variables...");
    logger->trace("  Using getID()...");
	if (copy->getID() == "data")
        logger->trace("    ok");
	else {
        logger->warn("    NOT ok, ID copy incorrect");
		fail += 1;
	}
    logger->trace("  Using getMsg()...");
	if (copy->getMsg() == "SubZero rox")
        logger->trace("    ok");
	else {
        logger->warn("    NOT ok, Msg copy incorrect");
		fail += 1;
	}
    logger->trace("  Showing imgs using showImg()...");
    logger->trace("  If both imgs are identical press spacebar, else press esc...");
	data->showImg("data");
	copy->showImg("copy");
	char key;
	while (1) {
		key = cvWaitKey(0);
		if (char(key) == 32) {
            logger->trace("    ok");
			break;
		}
		else if (char(key) == 27) {
            logger->warn("    NOT ok, img not same");
			fail++;
			break;
		}
	}

    logger->trace(" Changing msg of copy to \"whatever\"...");
	copy->setMsg("whatever");

//	logger->trace(" Changing org img content...");
//	data->closeImg();
//	copy->closeImg();
//	img = ImgDataTEST::camCap();
//	cvDestroyWindow("camCap");
//	data->setImg(&img);

    logger->trace(" Checking variables...");
    logger->trace("  Using getMsg() on original...");
	if (copy->getMsg() == "whatever" && data->getMsg() == "SubZero rox")
        logger->trace("    ok");
	else {
        logger->warn("    NOT ok, org or copy Msg incorrect");
		fail += 1;
	}
    logger->trace(" Using refcount to check independence...");
	int datarc, copyrc;
    datarc = data->img.u->refcount;
    copyrc = copy->img.u->refcount;
    logger->trace("    \"data\" img refcount: "+StringTools::intToStr(datarc));
    logger->trace("    \"copy\" img refcount: "+StringTools::intToStr(copyrc));
	if (datarc==2 && copyrc ==1) {
        logger->trace("    ok");
		fail--;
	}
	else if (datarc==3)
        logger->warn("    NOT ok, copy's img points to data's img obj");
	else
        logger->warn("    NOT ok, data ref should be 2, copy ref should be 1");
	fail++;
//	logger->trace("  Showing imgs using showImg()...");
//	data->showImg("data");
//	copy->showImg("copy");
//	logger->trace("  If copy different from data then deep copy ok press spacebar, else press esc...");
//	while (1) {
//		key = cvWaitKey(0);
//		if (char(key) == 32) {
//			logger->trace("    ok");
//			break;
//		}
//		else if (char(key) == 27) {
//			logger->warn("    NOT ok, img not same");
//			fail++;
//			break;
//		}
//	}
    logger->trace("Test complete.");
    logger->trace("Deleting data...");
	delete data;
	delete copy;

	if (fail > 0)
        logger->warn("  TEST FAILED: ImgData Copy Constructor");
    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;
}