如何使用python中的opencv确定一个图像中的一行是否是另一个图像中的另一行的子集?

如何使用python中的opencv确定一个图像中的一行是否是另一个图像中的另一行的子集?,python,opencv,image-processing,computer-vision,image-thresholding,Python,Opencv,Image Processing,Computer Vision,Image Thresholding,我有两张图片,分别是imageA和imageB,如下所示。现在我需要检查imageB中存在的行是否已经存在于图像A中(即imageB中存在的行应该是imageA中存在的行的子集)。我在OpenCV中使用了图像减法,但无法获得所需的输出。我是opencv的新手。所以请有人提供你的意见 注意:由于两幅图像中的线条不会100%精确匹配,因此可以为线条匹配设置一些阈值 图像a: 图像B: 以下是一种方法: 拍摄图像A,对其设置阈值,并在形态学上稍微放大,以允许在位置/对齐方面存在细微差异。更大的扩张将

我有两张图片,分别是imageA和imageB,如下所示。现在我需要检查imageB中存在的行是否已经存在于图像A中(即imageB中存在的行应该是imageA中存在的行的子集)。我在OpenCV中使用了图像减法,但无法获得所需的输出。我是opencv的新手。所以请有人提供你的意见

注意:由于两幅图像中的线条不会100%精确匹配,因此可以为线条匹配设置一些阈值

图像a:

图像B: 以下是一种方法:

  • 拍摄图像A,对其设置阈值,并在形态学上稍微放大,以允许在位置/对齐方面存在细微差异。更大的扩张将允许更大的错位
  • 拍摄图像B,设置阈值。计算非零像素

  • 对两幅图像按位进行AND运算,计算结果中有多少像素为白色,即两幅图像共有多少像素

  • 计算步骤2和步骤3的结果比率,以获得图像B中位于或非常接近图像a的像素百分比的度量

  • Hi@Mark Setchell在第2步中计算非零像素时,该图像是否应放大或我是否可以获取原始输入图像。对于第3步中的按位And运算,两幅图像都应该被稀释,对吗?不,我建议你只放大图像A而不是B。我将图像A视为图像B的像素可以降落的“着陆空间”。如果你放大B,你会对图像B中有多少像素有错误的测量。。。这会使你的比率计算不正确。是的,明白了。感谢@Mark提供此解决方案。以下是我的结果:非零像素图像B:464非零像素按位:407差异:57那么你知道如何确定可接受的阈值吗?很高兴它能工作。我想说,公差是特定于应用的。目前,图像B中87%的白色像素属于图像A中放大的白色像素。您可以尝试在所有方向上放大1像素,测量比率/百分比,看看您对此有何感受。然后重新开始,扩张2倍,测量百分比,看看你感觉如何。然后放大3,直到你觉得这些行不够相似……我将内核大小更新为(4,4),cv2.MORPH\u CROSS,迭代次数=2。现在它匹配了100%。谢谢你的回复@Mike