Python 如何将圆形图像裁剪为内接正方形,然后裁剪为内接圆形,最后裁剪为内接正方形?

Python 如何将圆形图像裁剪为内接正方形,然后裁剪为内接圆形,最后裁剪为内接正方形?,python,image,opencv,image-processing,python-imaging-library,Python,Image,Opencv,Image Processing,Python Imaging Library,我想根据以下内容裁剪下面附带的圆形图像: 将输入的圆形图像裁剪为内接在圆中的唯一正方形 将正方形图像向下裁剪到正方形中内接的圆 将上一步中的圆形图像裁剪为方形,以嵌入图像 我正在使用python、opencv和PIL。我曾尝试过使用硬编码坐标进行裁剪,但这显然会在应用于其他图像时产生问题,因此我希望有一个通用的解决方案 我已经包含了我希望如何裁剪它的粗略可视化: 此外,我还包括了原始图像: 如果您能提供一段代码片段并进行简要解释,我们将不胜感激。您不需要执行中间裁剪 只需计算结果平方参数 类似这

我想根据以下内容裁剪下面附带的圆形图像:

  • 将输入的圆形图像裁剪为内接在圆中的唯一正方形
  • 将正方形图像向下裁剪到正方形中内接的圆
  • 将上一步中的圆形图像裁剪为方形,以嵌入图像
  • 我正在使用python、opencv和PIL。我曾尝试过使用硬编码坐标进行裁剪,但这显然会在应用于其他图像时产生问题,因此我希望有一个通用的解决方案

    我已经包含了我希望如何裁剪它的粗略可视化:

    此外,我还包括了原始图像:


    如果您能提供一段代码片段并进行简要解释,我们将不胜感激。

    您不需要执行中间裁剪

    只需计算结果平方参数

    类似这样的伪代码(我更擅长c++):


    您不需要执行中间裁剪

    只需计算结果平方参数

    类似这样的伪代码(我更擅长c++):


    要裁剪的图像在几何上是一个以输入图像为中心的正方形,大小为一半。这是因为你要写两次,每次平方收缩2的平方根,除以SQRT(2)两次和除以2是一样的


    因此,如果您有一个侧面为D的输入正方形(或直径为D的圆形图像),您需要做的是以中心(D/2,D/2)和侧面为D/2进行裁剪。

    要裁剪的图像在几何上是一个以输入图像为中心的正方形,,大小为输入图像的一半。这是因为你要写两次,每次平方收缩2的平方根,除以SQRT(2)两次和除以2是一样的


    因此,如果您有一个侧面为D的输入正方形(或直径为D的圆形图像),您需要做的是裁剪中心(D/2,D/2)和侧面为D/2。

    根据输入中圆的直径计算内部正方形的大小似乎相当简单。然后,你就可以直接达到你的最终目标,而不需要中间步骤(如果你所追求的是中间步骤)。@john And You lost attached Img圆是否总是像你的示例中那样完美地适合正方形图片?根据输入中圆的直径来计算内正方形的大小似乎很简单。然后,你就可以直接达到你的最终目标,而不需要中间步骤(如果这是你所追求的)。@john和You lost attached Img圆是否总是像你的例子中那样完美地符合正方形图片?是的,我刚刚提出了同样的解决方案。谢谢。是的,我刚刚想出了同样的解决办法。谢谢
    def calcSideOfInscribedSquare(current_size):
        return current_size / sqrt(2)
    
    initial_side = min(image.cols, image.rows)
    first_squre_side = calcSideOfInscribedSquare(initial_side)
    second_square_side = calcSideOfInscribedSquare(first_squre_side)
    
    cv.Rect result_square(
        image.cols / 2 - second_square_side / 2,
        image.rows / 2 - second_square_side / 2,
        second_square_side,
        second_square_side)
    
    new_image = image(result_square)