我正在使用ORB特色匹配两个图像。一个是电视节目中的框架,另一个是徽标。如果徽标在框架内,则表示电视节目已打开。如果不在框架内,则表明电视正在运行商业广告块。
为此,我在包含电视徽标的框架中设置了一个矩形。然后,我正在检查矩形部分中包含哪些关键点。这是执行此操作的部分代码。
def pointatRectangulo(x,y,width,height,ptx,pty):
resultado = x < ptx < x+width and y < pty < y+height
return resultado
rectX = 1100
rectY = 600
rectWidth = 1180 - rectX
rectHeight = 670 - rectY
cv2.rectangle(frame,(rectX,rectY),(1180,670),(0,255,0),3)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
cent = False
cont = 0
for m in matches:
frame_idx = m.queryIdx
logo_idx = m.trainIdx
(x1,y1) = pc1[frame_idx].pt
(x2,y2) = pc2[logo_idx].pt
lista_pc1.append((x1, y1))
lista_pc2.append((x2, y2))
for point in lista_pc1:
cent = pointatRectangulo(rectX,rectY,rectWidth,rectHeight,point[0],point[1])
if (cent == True):
cont = cont + 1
#if cont > 5, then the TV is running a TV show and not a commercial block.
当然,在认为我已解决问题之后,我注意到我只是在询问算法原始框架中的关键点是否在同一框架的矩形部分中,而不是从框架中询问关键点徽标与上述矩形内框架中的关键点相匹配。
我已经查阅了一些OpenCV文档,但没有任何解决方案来解决此问题。有什么想法吗?