gpt4 book ai didi

python - cv2 drawMatches 在空白屏幕上绘制?

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

imageCorrespondence = cv2.drawMatches(imageLeft, kpLeft, imageRight, kpRight, [goodMatches[0]], None, flags=2)
cv2.imwrite('imageCorrespondence.png', imageCorrespondence)

在 jupyter notebook 中给出了预期的输出,但是当我使用 python 脚本保存文件时,它正在绘制匹配并且 flags=4 正在绘制关键点就好了,除了一切都发生在黑色图像上(右尺寸:左 + 右组合)。

enter image description here

可能存在后端选择问题,就像我们在使用 matplotlib 时遇到的问题?


示例代码运行良好:

import numpy as np
import cv2

def getCorrespondence(imageLeft, imageRight):
orb = cv2.ORB_create()
kpLeft, desLeft = orb.detectAndCompute(imageLeft, None)
kpRight, desRight = orb.detectAndCompute(imageRight, None)

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(desLeft, desRight)

goodMatches = []
for m in matches:
if m.distance < 100:
goodMatches.append(m)

print('Matches', len(goodMatches))

imageCorrespondence = cv2.drawMatches(imageLeft, kpLeft, imageRight, kpRight, [goodMatches[0]], None, flags=2)
return imageCorrespondence

if __name__ == '__main__':
imageLeft = cv2.imread('image_001.png')
imageRight = cv2.imread('image_002.png')

imageCorrespondence = getCorrespondence(imageLeft, imageRight)
cv2.imwrite('imageCorrespondence.png', imageCorrespondence)
print('Image Saved')

但是,一旦我开始将该功能与从其他地方加载的其他图像一起使用,它就会破坏某些东西。我确定这些图像是否有内容并且 cv2.imwrite('imageLeft', imageLeft) 工作正常并且图像保存良好。

最佳答案

我最初以为是第六个参数 None 造成的,但这并没有造成任何麻烦。

cv2.drawMatches() 将 imageLeft 和 imageRight 作为 numpy 数组,如 docs 中所述:

outImg    =   cv.drawMatches( img1, keypoints1, img2, keypoints2, matches1to2, outImg[, matchColor[, singlePointColor[, matchesMask[,flags]]]]    )

Parameters

  • img1 First source image.
  • keypoints1 Keypoints from the first source image.
  • img2 Second source image.
  • keypoints2 Keypoints from the second source image. ...

然而,打破这一点的是 alpha 层,如果你碰巧在 numpy 数组中加载 alpha 层,它会在黑色图像上绘制。当我手动删除 numpy 数组中的 alpha 层并且只有三个 channel 时,它开始正常工作。这可能是因为 matplotlib 处理 alpha 层的方式与 cv2.imwrite 处理相同的方式不同,它似乎在 Jupyter notebook 中工作但不使用 Python 脚本。

我最初认为我需要从 BGRA 切换到 ABGR,但事实并非如此,BGRA 很好,如果输入图像有第四个 alpha 层,我就会出现黑屏。 Opencv 通常在读取图像时去除 alpha 层...!

关于python - cv2 drawMatches 在空白屏幕上绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383569/

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