0
다음 코드를 사용하여 서클 만 검색합니다. 그러나 다른 모양도 감지하고 있습니다. 이 일을 도와주세요. 나는 HoughCircles를 사용했지만 좋은 결과를주지는 못합니다. 내 요구 사항은 서클 만 탐지해야합니다.OpenCV를 사용하는 서클 만 검색
Mat src, src_gray;
/// Read the image
src = t2;
if(! src.data) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
cv::waitKey(5000);
}
/// Convert it to gray
cvtColor(src, src_gray, CV_BGR2GRAY);
blur(src_gray, src_gray, Size(3,3));
/// Reduce the noise so we avoid false circle detection
GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2);
Mat src_lines; Mat src_gray_lines;
int thresh_lines = 100;
RNG rng_lines(12345);
Mat threshold_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
src_gray_lines = src_gray;
/// Detect edges using Threshold
threshold(src_gray_lines, threshold_output, thresh_lines, 255, THRESH_BINARY);
/// Find contours
findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
/// Find the rotated rectangles and ellipses for each contour
vector<RotatedRect> minRect(contours.size());
vector<RotatedRect> minEllipse(contours.size());
for(size_t i = 0; i < contours.size(); i++)
{
minRect[i] = minAreaRect(Mat(contours[i]));
}
/// Draw contours + rotated rects + ellipses
Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
for(size_t i = 0; i< contours.size(); i++)
{
// rotated rectangle
Point2f rect_points[4];
minRect[i].points(rect_points);
for(int j = 0; j < 4; j++)
line(src, rect_points[j], rect_points[(j+1)%4], Scalar(255,0,0), 1, 8);
}
내 질문에 명확하지 않은 경우 알려 주시기 바랍니다.