图片
代码
cv::Mat src = cv::imread("light_point.png", cv::IMREAD_COLOR);
cv::Mat draw = src.clone();
cv::Rect rt0(20, 80, src.cols - 30, 190);
cv::Rect rt1(20, 480, src.cols - 30, 190);
cv::Mat gray;
cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
cv::Mat dst(gray.size(), gray.type(), cv::Scalar(0));
gray(rt0).copyTo(dst(rt0));
gray(rt1).copyTo(dst(rt1));
cv::Mat gauss;
cv::GaussianBlur(dst, gauss, cv::Size(45, 45), 0.0);
cv::Mat binary = gauss > 90;
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);
cv::Mat marker = src.clone();
for (size_t i = 0; i < contours.size(); ++i)
{
cv::Point2f center;
float radius = 0.0f;
cv::minEnclosingCircle(contours[i], center, radius);
cv::RotatedRect rRect = cv::fitEllipse(contours[i]);
cv::drawMarker(marker, rRect.center, cv::Scalar(255), cv::MARKER_CROSS);
cv::circle(marker, center, (int)radius, cv::Scalar(0, 255));
}
结果