gpt4 book ai didi

python - 如何使用 cv2 覆盖/替换图像的一部分?

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:09 31 4
gpt4 key购买 nike

我有一个屋顶的图像,它覆盖了一个巨大的区域!我正在使用分段分析它的错误。然而,挑战在于有时屋顶的单次拍摄并没有涉及细节,因此很难对其进行分析。所以我们把它分成几个部分,拍摄更小部分的图像并进行分析。这是一个例子:

Entire roof shot

Part 1

Part 2

Part 3

所以现在我想分析零件是否有故障并一次性更换。以下是其中一个分析部分的外观:

Post Analysis

目前我的想法:如果我能以某种方式将未分析的部分映射到屋顶,我也可以使用相同的信息和方法将分析的部分映射到单个镜头。

我已经能够进行特征检测并识别单张照片中的零件,但是我不确定我应该如何转换它们以适应和替换单张照片中的确切零件。这是特征检测:

Feature detection for image/template matching

我一直在考虑尝试将较小的图像一个接一个地拼接成较大的图像,但我担心这可能行不通

PS:我使用的是 Linux、Python3 和 OpenCV 3.4.0

此外,原始的单镜头并没有被手动分成不同的部分。由于它是热成像摄像机,因此不可能在单张照片​​上获得高分辨率,因此摄像机会近距离拍摄不同的照片。这些部分是单独的图像,不是从单张照片中裁剪的。

编辑:我现在正在尝试一种替代方法,我检测零件图像中的故障,然后裁剪掉这些故障以用作模板,然后尝试使用 SIFT 进行特征检测以将故障作为单个模板上的模板进行匹配射击。然而,小故障正在与除自身以外的所有事物匹配:( 大多数较大的故障都被检测到很好,而中等的故障也不太好。我认为原因是图像分辨率低,单张照片无法复制更近镜头的错误和特征数量在模板匹配的单镜头上也更少。

最佳答案

更新的答案

对不起!我误解了这个问题。因此,使用您的特征映射方法,您可以在原始图片上获得一组点,这些点对应于新图片中的一组点。假设特征映射工作正常,您可以将对应关系描述为映射:

$$P_{new points} = T_{original to new } * P_{original} $$

其中 T_{original to new} 是 transformation matrix .如果你有这个变换矩阵,那么你可以很容易地反转它来找到“部分”图片与原始图片之间的关系。

挑战在于您目前有一个复杂的转换矩阵!您正在寻找的那个有旋转分量、平移分量、缩放分量,并且很可能也发生了一些倾斜。给定一组特征点,我不确定找到此矩阵的正确方法。

如果您不介意做一些手动工作,我建议您找到一组在两张图片上对应的线条并使用 OpenCV 的 perspective transformation为您找到这个矩阵。

旧的、不相关的答案

我有一个 KISS 答案:

当您从“整个屋顶拍摄图像”中手动选择“部分 1-3”时,请跟踪它们的初始大小和位置。

如果您提前知道,则无需事后计算变换。对于初学者,我建议将图像分成四分位数,并在你有这个简单的几何图形时叠加检测。一旦成功,解决原始图片中任意大小的框的问题。

关于python - 如何使用 cv2 覆盖/替换图像的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51616160/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com