Opencv 使用图像比较检测丢失的对象

Opencv 使用图像比较检测丢失的对象,opencv,image-processing,Opencv,Image Processing,我有一个应用程序,需要为一个房间拍两张照片,并检测第一张照片中的一个物体是否在第二张照片中丢失。它如何使用OpenCV或任何其他工具完成此任务?如果您感兴趣的对象具有众所周知的结构-即,它是一个增强现实标记,那么此任务描述得很好,实现起来几乎微不足道。如果你对丢失的物体没有先验知识,你唯一能做的就是比较两张照片,如全景拼接,可以通过SIFT或SURF完成(请进一步阅读)。如果对象更复杂,并且两幅图像的视野相似,并且丢失对象的模型是先验已知的(即,您有感兴趣对象的图片,并且只有它),则可以使用SI

我有一个应用程序,需要为一个房间拍两张照片,并检测第一张照片中的一个物体是否在第二张照片中丢失。它如何使用OpenCV或任何其他工具完成此任务?

如果您感兴趣的对象具有众所周知的结构-即,它是一个增强现实标记,那么此任务描述得很好,实现起来几乎微不足道。如果你对丢失的物体没有先验知识,你唯一能做的就是比较两张照片,如全景拼接,可以通过SIFT或SURF完成(请进一步阅读)。如果对象更复杂,并且两幅图像的视野相似,并且丢失对象的模型是先验已知的(即,您有感兴趣对象的图片,并且只有它),则可以使用SIFT或SURF检测先验模型图像和输入图像中的特征(您希望在其中找到丢失的对象),执行特征匹配并查找最密集的匹配特征簇(即使用粒子群优化算法)。您需要注意,这并非在所有情况下都有效,可能会给您带来大量误报。干扰(如物体从各个侧面看起来不同)、照明差异、部分遮挡等)将很容易破坏此模型。此方法不需要对图像进行去噪处理等,因为SIFT是缩放、平移和缩放旋转不变性


有很多更可靠的方法可以实现这一点,包括深度学习(查找有关目标检测的科学论文),但具有特征匹配的图像似乎是最容易尝试的。这比你想象的要难。两张图像是否具有相同的POV?是否有要查找的对象的模板?对象是否始终具有相同的方向?还是只是查找任何/所有缺失的对象?我认为需要详细说明如果你想得到一个更完整的答案,请回答你的问题。计算两帧的差异,前提是相机位置和照明保持不变,它将生成一个二值遮罩,你可以稍后使用它来查找轮廓并获得缺失的位置object@Soltius感谢您的快速回复1。两张照片都是由普通用户w单独拍摄的使用智能手机时,角度和方向将不完全相同。2.我没有缺少对象的模板3.我们可以假设只有一个对象将丢失,并且它或多或少位于图像的中心。好的,其中一种方法是:a/图像注册(找到两幅图像重叠的变换)(可能需要包括扭曲)b/图像减法以找出图像之间的差异。困难的是,配准可能并不完美,因此如果重叠的图像移动一点点,那么b/中会有很多差异,但可能会有一个“巨大的差异”在你丢失的物体的位置,你将能够找到它的后处理。