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; }
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; }
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; }
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; }