- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
imageCorrespondence = cv2.drawMatches(imageLeft, kpLeft, imageRight, kpRight, [goodMatches[0]], None, flags=2)
cv2.imwrite('imageCorrespondence.png', imageCorrespondence)
在 jupyter notebook 中给出了预期的输出,但是当我使用 python 脚本保存文件时,它正在绘制匹配并且 flags=4
正在绘制关键点就好了,除了一切都发生在黑色图像上(右尺寸:左 + 右组合)。
可能存在后端选择问题,就像我们在使用 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/
我正在尝试在 2 张图片上找到匹配的兴趣点。这个项目的最后是建立全景图。 我有这个代码 SIFT detector(0); src1 = imread( folder + inputName1 , 1
imageCorrespondence = cv2.drawMatches(imageLeft, kpLeft, imageRight, kpRight, [goodMatches[0]], None
我通过在 features2d 框架中使用不同的检测器从两个连续的特征点中获得了特征点: 在第一帧中,特征点被绘制成红色 在下一帧中,特征点绘制为蓝色 我想在第一帧内(带红点的图像)这些红色和蓝色(匹
我的代码包含一个部分,我在其中对一组匹配项进行排序,并根据距离定义良好的匹配项。当我尝试 drawMatches 时,我收到一个错误: OpenCV Error: Assertion failed (
我知道drawMatches函数不会显示其matchs1to2参数的所有匹配项。这是基于其其他参数和标志(例如“不显示单行”)。我想知道是否有任何方法可以访问数组格式(例如DMatch结构)的输出匹配
当我尝试执行以下操作时: cv2.drawMatches(img1, keypoints1, img2, keypoints2, 匹配, 无, matchColor=(0,255,0), single
我是 OpenCV 的新手。我正在尝试在 iOS 上的 OpenCV 中使用 FLANN/SURF 在图像之间绘制特征匹配。我正在关注这个例子: http://docs.opencv.org/doc/
我试图显示两个图像之间的匹配关键点(一个是从我的相机捕获的,另一个是从数据库捕获的) 任何人都可以帮助我在我的代码中编写 DrawMatches 函数以显示 2 个图像之间的匹配线。 这是我的代码:
我只是在 OpenCV 中做一个特征检测的例子。这个例子如下所示。它给了我以下错误 module' 对象没有属性 'drawMatches' 我已经检查了 OpenCV 文档,但不确定为什么会出现此错
我正在尝试检测视频中的对象。我使用 SURF 作为特征检测和描述符提取器,使用 BRUTFORCE 作为匹配器。我用面孔测试了我的工作,我拍了一张我的照片,当我运行相机并将其对准我时,我的脸被检测到并
不画火柴。 Opencv 3.0,完全更新的 Ubuntu。代码运行但未显示任何匹配项。测试区域直接从图像中剪切和复制以进行匹配。 import numpy as np import cv2 cv2.
这是 OpenCV 的 drawMatches() 功能: void drawMatches(Mat img1, vector keypoints1, Mat img
我写了一段代码,它通过 KNN 算法找到 K 个最接近的匹配项。在获得 matMatch 和 matchIndices 之后,我尝试在两个结果帧之间绘制匹配对。 我将 matMask 和 ma
我使用 Sift/Surf 和 ORB,但有时我会遇到 drawMatch 函数的问题。 错误在这里: OpenCV Error: Assertion failed (i2 >= 0 && i2 =
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 4年前关闭。 Improve this question 我有
我是一名优秀的程序员,十分优秀!