OpenCV切割图片

裁剪圆形图片:

/////////////////////////////////////////////////////////////////////////////
//将图片裁剪为圆图片 从原图片的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 圆心坐标点和半径值的小数点位数

猜你喜欢

转载自blog.csdn.net/qq_28093585/article/details/80096977
今日推荐