这是我的输入图像:
我有这样的代码来覆盖输入图像的分割颜色:
# sample execution (requires torchvision)
from PIL import Image
from torchvision import transforms
input_image = Image.open("samping.JPG")
input_image = input_image.convert("RGB")
preprocess = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0) # create a mini-batch as expected by the model
# move the input and model to GPU for speed if available
if torch.cuda.is_available():
input_batch = input_batch.to('cuda')
model.to('cuda')
with torch.no_grad():
output = model(input_batch)['out'][0]
output_predictions = output.argmax(0)
# create a color pallette, selecting a color for each class
palette = torch.tensor([2 ** 25 - 1, 2 ** 15 - 1, 2 ** 21 - 1])
colors = torch.as_tensor([i for i in range(21)])[:, None] * palette
colors = (colors % 255).numpy().astype("uint8")
# plot the semantic segmentation predictions of 21 classes in each color
r = Image.fromarray(output_predictions.byte().cpu().numpy()).resize(input_image.size)
r.putpalette(colors)
然后我得到这个结果:这是我的分割图像叠加颜色:
但是,我想用另一个图像覆盖/改变颜色,例如这个图像:
我想要的结果图像:
改变分割板(颜色)到我的标志,我怎么才能实现呢?
1条答案
按热度按时间mwkjh3gx1#
欢迎来到我的世界,糊涂虫!
OpenCV是一个计算机视觉库,非常适合这类任务。您可以使用
pip install opencv-python
安装它。简而言之,以下是所需的步骤:1.找出黑色像素的位置。
1.找出最大的黑色像素块存在的地方,通过将它们转换为轮廓,然后计算它们各自的大小。(注意右侧背面悬挂的几个黑色像素,用绿色突出显示)
1.找到与最大轮廓最匹配的旋转矩形。
1.调整覆盖图像的大小并旋转它。在覆盖图像周围创建一个衬垫,以便在旋转它时它不会被切断。
(使用的图像是Gary Larson's "Cow Tools",我使用了一个高大的图像来展示缩放属性)
1.将生成的叠加图像粘贴到原始图像的顶部。在计算位置时一定要考虑到垫子,否则它会走到你打算去的东南方。
瞧!