You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图像内部区域叠加开发需求:带坐标旋转将第二张图内部区域叠加至第一张图

Hey there! Let's figure out how to overlay the inner region of your second image onto the first one, complete with coordinate rotation to get that exact effect you're after. I'll walk you through a practical Python solution using OpenCV—super straightforward once you break it down.

Solution: Overlay Rotated Inner Region from Image 2 onto Image 1

Let's break this task into manageable steps:

  • Load both input images
  • Isolate the inner regions from each image
  • Rotate the second image's inner region around its center
  • Blend the rotated region seamlessly into the first image's inner area

Step 1: Grab Required Tools

We'll use OpenCV for all the image heavy lifting and NumPy for array operations. If you haven't installed them yet, run this command in your terminal:

pip install opencv-python numpy

Then import the libraries in your script:

import cv2
import numpy as np

Step 2: Load Images & Define Inner Regions

First, load your two images. We'll assume you're working with rectangular inner regions (adjust the coordinates to match your actual images—if your inner area is a different shape, we'll cover that in the notes later).

# Load your images (replace the file paths with your actual ones)
img1 = cv2.imread("first_image.jpg")
img2 = cv2.imread("second_image.jpg")

# Define the inner region coordinates (x, y, width, height)
# Tweak these numbers to match where your inner areas are located
img1_inner_roi = (100, 100, 300, 300)  # (x1, y1, width1, height1)
img2_inner_roi = (50, 50, 300, 300)    # (x2, y2, width2, height2)

# Extract the inner regions from both images
x1, y1, w1, h1 = img1_inner_roi
img1_inner = img1[y1:y1+h1, x1:x1+w1]

x2, y2, w2, h2 = img2_inner_roi
img2_inner = img2[y2:y2+h2, x2:x2+w2]

Step 3: Rotate the Second Inner Region

We need to rotate the second region around its center so it fits perfectly into the first image's inner area without getting cropped. Here's how to do that:

# Set your desired rotation angle (negative values = counter-clockwise)
rotation_angle = 45  # example: 45 degrees clockwise

# Calculate the center point of the second inner region
center = (w2 // 2, h2 // 2)

# Create the rotation matrix
rotation_matrix = cv2.getRotationMatrix2D(center, rotation_angle, 1.0)

# Rotate the region—we'll fill empty space with white (adjust border color if needed)
rotated_img2_inner = cv2.warpAffine(
    img2_inner,
    rotation_matrix,
    (w2, h2),
    borderMode=cv2.BORDER_CONSTANT,
    borderValue=(255, 255, 255)  # white border; match your img1 background for better blending
)

Step 4: Overlay the Rotated Region onto Image 1

To make the overlay look clean (no weird borders), we'll use masks to isolate only the parts of the rotated region we want to overlay:

# Create a mask to exclude the white border from the rotated region
gray_rotated = cv2.cvtColor(rotated_img2_inner, cv2.COLOR_BGR2GRAY)
mask = cv2.threshold(gray_rotated, 254, 255, cv2.THRESH_BINARY_INV)[1]

# Invert the mask to black out the area in img1 where we'll place the rotated region
mask_inv = cv2.bitwise_not(mask)

# Black out the target area in img1's inner region
img1_inner_bg = cv2.bitwise_and(img1_inner, img1_inner, mask=mask_inv)

# Extract only the non-border part of the rotated region
img2_inner_fg = cv2.bitwise_and(rotated_img2_inner, rotated_img2_inner, mask=mask)

# Combine the background (img1's inner area) and foreground (rotated region)
combined_inner = cv2.add(img1_inner_bg, img2_inner_fg)

# Replace the inner region in the original img1 with our combined result
img1[y1:y1+h1, x1:x1+w1] = combined_inner

# Save or view the final image
cv2.imwrite("overlay_result.jpg", img1)
cv2.imshow("Final Result", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

Customization Tips

  • Non-rectangular inner regions: Use cv2.findContours() to detect the inner contour of each image, then create a mask from that contour instead of the rectangular ROI.
  • Transparent overlay: Replace the bitwise operations with cv2.addWeighted() to blend the rotated region with some transparency (e.g., cv2.addWeighted(img1_inner, 0.7, rotated_img2_inner, 0.3, 0)).
  • Better border blending: Change the borderValue in warpAffine to match the average color of img1's inner region background for a seamless look.

内容的提问来源于stack exchange,提问作者Susmita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:04:43