C 中的 OpenCV - 绘制一个应该只出现在图像上半部分的圆圈?

OpenCV in C - drawing a circle that should appear only in upper half of the image?

我要为多张图片画一个圆圈。对于每个图像,以曲率半径不同,中心不变。

问题是:无论圆圈有多大,它都不应该越过图像的上半部分。如果它变得不可见或只有一部分在下半部分可见,那也没关系。

我在 C 语言中使用 OpenCV 2.4.4。 圆的值通过以下方式找到:

 for(angle1 = 0; angle1<360; angle1++)
  {
    x [angle1]= r * sin(angle1) + axis_x;
    y [angle1]= r * cos(angle1) + axis_y;
  }

仅供参考:

 cvCircle( img,center_circle, r,cvScalar( 0, 0, 255,0 ),2,8,0);

在整个图像中画圆。我不想发生这种情况。

我该怎么做? Rem:圆圈的任何部分都不应出现在图像的上半部分。 并且代码应该在 OpenCV 的 C 语言中。

在 MALTAB 中非常简单。我只需要 select 像素并将它们映射到图像上。 我是 OpenCV 的新手,操作像 img->data.i/f/s/db[50] =50;显示错误。

一个非常天真的方法是创建图像上半部分的副本,绘制完整的圆,然后将上半部分复制回原始图像。这可能不是最好的方法,但它确实有效。实现方法如下:

void drawCircleLowerHalf(IplImage* image, CvPoint center, int radius, CvScalar color, int thickness, int line_type, int shift)
{
    CvRect roi = cvRect(0,0,image->width, image->height/2);
    IplImage* upperHalf = cvCreateImage(cvSize(image->width, image->height/2), image->depth, image->nChannels);
    cvSetImageROI(image, roi);
    cvCopy(image,upperHalf);
    cvResetImageROI(image);

    cvCircle(image, center, radius, color, thickness, line_type, shift);

    cvSetImageROI(image, roi);
    cvCopy(upperHalf, image);
    cvResetImageROI(image);

    cvReleaseImage(&upperHalf);
}

只需使用与 cvCircle 相同的参数调用此函数。