PERF_TEST_P(InpaintArea_InpaintingMethod, inpaint, testing::Combine( testing::Values(::perf::szSmall24, ::perf::szSmall32, ::perf::szSmall64), InpaintingMethod::all() ) ) { Mat src = imread(getDataPath("gpu/hog/road.png")); Size sz = get<0>(GetParam()); int inpaintingMethod = get<1>(GetParam()); Mat mask(src.size(), CV_8UC1, Scalar(0)); Mat result(src.size(), src.type()); Rect inpaintArea(src.cols/3, src.rows/3, sz.width, sz.height); mask(inpaintArea).setTo(255); declare.in(src, mask).out(result).time(120); TEST_CYCLE() inpaint(src, mask, result, 10.0, inpaintingMethod); Mat inpaintedArea = result(inpaintArea); SANITY_CHECK(inpaintedArea); }
void MainWindow::mouseHandler(int event, int x, int y, int flags, void* param) { MainWindow* window = (MainWindow*) param; if (window->mode == 3) { x = bound(x, window->R, window->_src.cols-1-window->R); y = bound(y, window->R, window->_src.rows-1-window->R); } else { x = bound(x, 0, window->_src.cols-1); y = bound(y, 0, window->_src.rows-1); } // user press left button if (event == CV_EVENT_LBUTTONDOWN && !window->drag) { if (window->mode == 1) window->point = Point(x, y); else if (window->mode == 2) { window->points.clear(); window->points.push_back(Point(x, y)); } else if (window->mode == 3) { Rect box = Rect(x-window->R, y-window->R, 1+window->R*2, 1+window->R*2); Mat temp; medianBlur(window->_dst(box), temp, window->kernel); temp.copyTo(window->_dst(box), window->round_mask); window->round_mask.copyTo(window->zone(box), window->round_mask); imshow("Image", window->_dst); } window->drag = true; } // user drag the mouse if (event == CV_EVENT_MOUSEMOVE && window->drag) { Mat temp = window->_dst.clone(); if (window->mode == 1) rectangle(temp, window->point, Point(x, y), CV_RGB(255, 0, 0), 2, 8, 0); else if (window->mode == 2) { window->pts = (const Point*)Mat(window->points).data; window->npts = window->points.size(); window->points.push_back(Point(x, y)); polylines(temp, &window->pts, &window->npts, 1, false, Scalar(0,0,255), 2, 8, 0); } else if (window->mode == 3) { Rect box = Rect(x-window->R, y-window->R, 1+window->R*2, 1+window->R*2); Mat temp; medianBlur(window->_dst(box), temp, window->kernel); temp.copyTo(window->_dst(box), window->round_mask); window->round_mask.copyTo(window->zone(box), window->round_mask); imshow("Image", window->_dst); return; } imshow("Image", temp); } // user release left button if (event == CV_EVENT_LBUTTONUP && window->drag) { if (window->mode == 1) { Point temp(window->point); window->point.x = min(x, temp.x); x = max(x, temp.x); window->point.y = min(y, temp.y); y = max(y, temp.y); rectangle(window->zone, window->point, Point(x, y), Scalar(255), CV_FILLED, 8, 0); Rect box = Rect(window->point.x, window->point.y, x - window->point.x, y - window->point.y); if (window->style == 1) { medianBlur(window->_dst(box), window->_dst(box), window->kernel); medianBlur(window->_dst(box), window->_dst(box), window->kernel); } else { Mat mask = Mat::zeros(window->_src.size(), CV_8UC1); rectangle(mask, window->point, Point(x, y), CV_RGB(255, 255, 255), CV_FILLED, 8, 0); inpaint(window->_dst, mask, window->_dst, 5, INPAINT_TELEA); } } else if (window->mode == 2) { Rect box = boundingRect(window->points); vector< vector<Point> > contour; contour.push_back(window->points); Mat mask = Mat::zeros(window->_src.size(), CV_8UC1); fillPoly(mask, contour, Scalar(255)); fillPoly(window->zone, contour, Scalar(255)); if (window->style == 1) { Mat temp; medianBlur(window->_dst(box), temp, window->kernel); medianBlur(temp, temp, window->kernel); temp.copyTo(window->_dst(box), mask(box)); } else inpaint(window->_dst, mask, window->_dst, 5, INPAINT_TELEA); } imshow("Image", window->_dst); window->drag = false; } // user click right button: reset all if (event == CV_EVENT_RBUTTONUP) { window->_dst = window->_src.clone(); window->zone = Mat::zeros(window->_src.size(), CV_8UC1); window->drag = false; imshow("Image", window->_dst); } }