cv2抽签在空白屏幕上绘制?

2024-04-26 04:43:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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?在


示例代码工作正常:

^{pr2}$

但是当我开始使用这个函数来处理从别处加载的其他图像时,它就会破坏某些东西。我确定如果这些图像有内容并且cv2.imwrite('imageLeft', imageLeft)工作正常,图像也能很好地保存。在


Tags: 图像nonepng绘制jupytercv2flagsimwrite
1条回答
网友
1楼 · 发布于 2024-04-26 04:43:11

我最初以为第六个参数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. ...

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

我最初以为我需要从BGRA切换到ABGR,但BGRA并不是这样的,如果输入图像有第四个alpha层,我就会得到一个黑屏。在读取图像时,Opencv通常会剥离alpha层。。。!在

相关问题 更多 >

    热门问题