Qt::WindowFrameSection OverlayEditorScene::rectSection(const QRectF &qrf, const QPointF &qp, qreal dist) { qreal left, right, top, bottom; top = distancePointLine(qrf.topLeft(), qrf.topRight(), qp); bottom = distancePointLine(qrf.bottomLeft(), qrf.bottomRight(), qp); left = distancePointLine(qrf.topLeft(), qrf.bottomLeft(), qp); right = distancePointLine(qrf.topRight(), qrf.bottomRight(), qp); if ((top < dist) && (top < bottom)) { if ((left < dist) && (left < right)) return Qt::TopLeftSection; else if (right < dist) return Qt::TopRightSection; return Qt::TopSection; } else if (bottom < dist) { if ((left < dist) && (left < right)) return Qt::BottomLeftSection; else if (right < dist) return Qt::BottomRightSection; return Qt::BottomSection; } else if (left < dist) { return Qt::LeftSection; } else if (right < dist) { return Qt::RightSection; } if (qrf.contains(qp)) return Qt::TitleBarArea; return Qt::NoSection; }
static void drawEpipolarLines(const std::string& title, const cv::Matx<T1, 3, 3> F, const cv::Mat& img1, const cv::Mat& img2, const std::vector<cv::Point_<T2> > points1, const std::vector<cv::Point_<T2> > points2, const float inlierDistance = -1) { CV_Assert(img1.size() == img2.size() && img1.type() == img2.type()); cv::Mat outImg(img1.rows, img1.cols * 2, CV_8UC3); cv::Rect rect1(0, 0, img1.cols, img1.rows); cv::Rect rect2(img1.cols, 0, img1.cols, img1.rows); /* * Allow color drawing */ if (img1.type() == CV_8U) { cv::cvtColor(img1, outImg(rect1), CV_GRAY2BGR); cv::cvtColor(img2, outImg(rect2), CV_GRAY2BGR); } else { img1.copyTo(outImg(rect1)); img2.copyTo(outImg(rect2)); } std::vector<cv::Vec<T2, 3> > epilines1, epilines2; cv::computeCorrespondEpilines(points1, 1, F, epilines1); //Index starts with 1 cv::computeCorrespondEpilines(points2, 2, F, epilines2); CV_Assert(points1.size() == points2.size() && points2.size() == epilines1.size() && epilines1.size() == epilines2.size()); cv::RNG rng(0); for (size_t i = 0; i < points1.size(); i++) { if (inlierDistance > 0) { if (distancePointLine(points1[i], epilines2[i]) > inlierDistance || distancePointLine(points2[i], epilines1[i]) > inlierDistance) { //The point match is no inlier continue; } } /* * Epipolar lines of the 1st point set are drawn in the 2nd image and vice-versa */ cv::Scalar color(rng(256), rng(256), rng(256)); cv::Mat temp = outImg.clone(); cv::Mat tmp2 = outImg(rect2); cv::Mat tmp1 = outImg(rect1); //outImg.copyTo(temp); cv::line(tmp2, cv::Point(0, -epilines1[i][2] / epilines1[i][1]), cv::Point(img1.cols, -(epilines1[i][2] + epilines1[i][0] * img1.cols) / epilines1[i][1]), color); cv::circle(tmp1, points1[i], 3, color, -1, CV_AA); cv::line(tmp1, cv::Point(0, -epilines2[i][2] / epilines2[i][1]), cv::Point(img2.cols, -(epilines2[i][2] + epilines2[i][0] * img2.cols) / epilines2[i][1]), color); cv::circle(tmp2, points2[i], 3, color, -1, CV_AA); } cv::imshow(title, outImg); cv::waitKey(1); }
static void myDrawEpipolarLines(const std::string& title, const cv::Matx<T1, 3, 3> F, const cv::Mat& img1, const cv::Mat& img2, const std::vector<cv::Point_<T2> > points1, const std::vector<cv::Point_<T2> > points2) { cv::Mat outImg(img1.rows, img1.cols, CV_8UC3); cv::Mat outImgInit(img1.rows, img1.cols, CV_8UC3); if (img1.type() == CV_8U) { cv::cvtColor(img1, outImg, CV_GRAY2BGR); } else { img1.copyTo(outImg); } outImg.copyTo(outImgInit); std::vector<cv::Vec<T2, 3> > epilines; cv::computeCorrespondEpilines(points1, 1, F, epilines); for (size_t i = 0; i < points1.size(); i++) { cv::Mat outImg2(img1.rows, img1.cols, CV_8UC3); outImgInit.copyTo(outImg2); cv::line(outImg2, cv::Point(0, -epilines[i][2] / epilines[i][1]), cv::Point(img1.cols, -(epilines[i][2] + epilines[i][0] * img1.cols) / epilines[i][1]), cv::Scalar(255, 0, 0)); cv::circle(outImg2, points2[i], 3, cv::Scalar(0, 255, 255), 2); cv::line(outImg, cv::Point(0, -epilines[i][2] / epilines[i][1]), cv::Point(img1.cols, -(epilines[i][2] + epilines[i][0] * img1.cols) / epilines[i][1]), cv::Scalar(255, 0, 0)); cv::circle(outImg, points2[i], 3, cv::Scalar(0, 255, 255), 2); std::cout << "Current Distance to point" << points2[i] << ": " << distancePointLine(points2[i], epilines[i]) << std::endl; cv::imshow(title, outImg2); cv::waitKey(0); } cv::imshow(title, outImg); cv::waitKey(0); }