裁剪圆形图片:
/////////////////////////////////////////////////////////////////////////////
//将图片裁剪为圆图片 从原图片的X1,Y1点开始裁剪宽度为radius高度为radius的图片
//*image 带进来的图片句柄
//*outmage 输出图像句柄 图片大小应该是宽度为radius高度为radius的图片
//将图片裁剪成圆形
//x1,y1为圆心坐标
//radius圆半径
int CircularCut(Mat *image,Mat *outmage,int x1,int y1,int radius)
{
Point center(x1,y1);
circle((*image), center, radius, Scalar(0, 0, 255), 2, 8, 0);
for (int x = x1-radius; x < x1+radius; x++)
{
for (int y = y1-radius; y < y1+radius; y++)
{
int temp = ((x - center.x) * (x - center.x) + (y - center.y) *(y - center.y));
if (temp < (radius * radius))
{
outmage->at<Vec3b>(Point(x, y))[0] = image->at<Vec3b>(Point(x, y))[0];
outmage->at<Vec3b>(Point(x, y))[1] = image->at<Vec3b>(Point(x, y))[1];
outmage->at<Vec3b>(Point(x, y))[2] = image->at<Vec3b>(Point(x, y))[2];
}
}
}
return 1;
}
(1)cvCircle函数
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)
img为源图像指针
center为画圆的圆心坐标
radius为圆的半径
color为设定圆的颜色,规则根据B(蓝)G(绿)R(红)
thickness 如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充
line_type 线条的类型。默认是8
shift 圆心坐标点和半径值的小数点位数