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
相同的参数调用此函数。
我要为多张图片画一个圆圈。对于每个图像,以曲率半径不同,中心不变。
问题是:无论圆圈有多大,它都不应该越过图像的上半部分。如果它变得不可见或只有一部分在下半部分可见,那也没关系。
我在 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
相同的参数调用此函数。