首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cv2将图像的一部分覆盖/替换为另一部分?

如何使用cv2将图像的一部分覆盖/替换为另一部分?
EN

Stack Overflow用户
提问于 2018-07-31 14:45:13
回答 1查看 2K关注 0票数 3

我有一个屋顶的图像,覆盖了一个很大的区域!我正在分析它的故障使用分割。然而,挑战在于,有时屋顶上的一张照片没有细节,所以很难分析。所以我们把它分成几个部分,并对较小部分的图像进行分析。下面是一个示例:

全顶板射击

第1部分

第2部分

第三部分

因此,现在我想分析零件的故障,并更换它的单一镜头。下面是其中一个被分析的部分是什么样子的:

岗位分析

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

我已经能够做的特征检测和识别部分上的单一镜头,但我不确定我应该如何转换他们,以适应和替换准确的部分上的单一镜头。以下是特征检测:

图像/模板匹配的特征检测

我一直在考虑将较小的图像一个接一个地缝合到较大的图像上,但我担心这可能行不通。

PS:我正在使用Linux、Python3和OpenCV 3.4.0

另外,原始的单一镜头不是手动划分为不同的部分。由于它是一个热凸轮,它不可能有高分辨率的单次拍摄,所以凸轮采取不同的拍摄近距离。这些部分是单独的图像,而不是从单一的镜头裁剪。

编辑:我正在尝试另一种方法,即检测部件图像中的故障,然后将这些故障裁剪出来作为模板使用,然后尝试使用SIFT进行特征检测,将故障作为模板在一次拍摄中匹配。然而,小故障与自身以外的每件事都是匹配的:(大多数较大的故障都被检测到了,而中等的故障也不太好。)我认为这是因为图像的分辨率较低,而单镜头图片并不能在更近的镜头上复制故障,而且对于模板匹配而言,单个镜头的特征数量也较少。

EN

回答 1

Stack Overflow用户

发布于 2018-07-31 19:43:31

更新答复

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

$$P_{新点}=T_{原到新}*P_{原始} $$

其中T_{原始到新}是一个变换矩阵。如果您有这个转换矩阵,那么您可以很容易地反转它,以找到“部分”图片与原始图像之间的关系。

挑战是,您目前有一个复杂的转换矩阵!你要找的是一个旋转的,平移的,缩放的,很有可能也发生了一些偏斜。考虑到特征点的集合,我不确定找到这个矩阵的正确方法。

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

旧的,不相干的答案

我有一个吻回答:

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

如果提前知道,则不需要事后计算转换。首先,我建议将图像分割成四分位数,当你有这个简单的几何图形时,我建议将检测结果叠加起来。一旦成功,就可以从原始图片中处理任意大小的盒子的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51616160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档