16,472
社区成员
发帖
与我相关
我的任务
分享
vector<Point> getCirclePts(Point center, int radius)
{
vector<Point> ret;
int err = 0, dx = radius, dy = 0, plus = 1, minus = (radius << 1) - 1;
while(dx >= dy)
{
int mask;
int y11 = center.y - dy, y12 = center.y + dy, y21 = center.y - dx, y22 = center.y + dx;
int x11 = center.x - dx, x12 = center.x + dx, x21 = center.x - dy, x22 = center.x + dy;
ret.push_back(Point(x11,y11));
ret.push_back(Point(x11,y12));
ret.push_back(Point(x12,y11));
ret.push_back(Point(x12,y12));
ret.push_back(Point(x21,y21));
ret.push_back(Point(x21,y22));
ret.push_back(Point(x22,y21));
ret.push_back(Point(x22,y22));
dy++;
err += plus;
plus += 2;
mask = (err <= 0) - 1;
err -= minus & mask;
dx += mask;
minus -= mask & 2;
}
return ret;
}
void get_circle_coordinates(int width, int height, cv::Point center, int radius, std::vector<cv::Point> &coordinates)
{
cv::Scalar color;
coordinates.clear();
cv::Mat image(width, height, CV_8UC3, cv::Scalar(0, 0, 0));
circle(image, center, radius, cv::Scalar(255, 255, 255), 1);
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
COpenCV::get_color(image, cv::Point(i, j), color);
if ((255 == color.val[0]) && (255 == color.val[1]) && (255 == color.val[2]))
coordinates.push_back(cv::Point(i, j));
}
}
}