- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过 python 使用 opencv 在火车图像中查找多个对象,并将其与从查询图像中检测到的关键点进行匹配。对于我的情况,我正在尝试检测下面提供的图像中的网球场.我看了网上的教程,发现只能检测1个物体。我想在其中插入一个循环以查找多个对象,但我没有这样做。关于如何做的任何想法?*我使用 SIFT,因为 ORB 对我的情况效果不佳
这是代码和一组示例图像。
import numpy as np
import cv2
from matplotlib import pyplot as plt
MIN_MATCH_COUNT = 10
img1 = cv2.imread('Image 11.jpg',0) # queryImage
img2 = cv2.imread('Image 5.jpg',0) # trainImage
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1,des2,k=2)
# store all the good matches as per Lowe's ratio test.
good = []
for m,n in matches:
if m.distance < 0.7*n.distance:
good.append(m)
if len(good)>MIN_MATCH_COUNT:
src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2)
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
matchesMask = mask.ravel().tolist()
h,w = img1.shape
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
dst = cv2.perspectiveTransform(pts,M)
img2 = cv2.polylines(img2,[np.int32(dst)],True,255,3, cv2.LINE_AA)
else:
print( "Not enough matches are found - {}/{}".format(len(good), MIN_MATCH_COUNT) )
matchesMask = None
draw_params = dict(matchColor = (0,255,0), # draw matches in green color
singlePointColor = None,
matchesMask = matchesMask, # draw only inliers
flags = 2)
img3 = cv2.drawMatches(img1,kp1,img2,kp2,good,None,**draw_params)
plt.imshow(img3, 'gray'),plt.show()
提前致谢!
最佳答案
如果您多次使用相同的图像,您在寻找单应性时会遇到一些问题。即使有循环,您的关键点描述也可能围绕不同的相同图像混合。您可以进行预处理并重新组合关键点以进行多重匹配,但对于不同大小的不同图像可能会很复杂我建议使用模板匹配,但困难在于缩放和旋转不变性。您可以阅读这篇文章以获得一些帮助 https://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv/
希望对您有所帮助!
关于python-3.x - python : Feature Matching + Homography to find Multiple Objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48557761/
我想问一个我已经在 OpenCV 板上问过但没有得到答案的问题:http://answers.opencv.org/question/189206/questions-about-the-fundam
我正在使用OpenCV在Android上创建应用程序,并且需要Feature2d和Homography的Java代码。我需要像视频一样连续处理。我不是C++专家,所以无法移植。因此,如果可以的话,请提
我有两张相同的图片,但第二张变形了并且尺寸不同。我希望能够在第一张图片上选择一个点并在第二张图片上找到完全相同的点。图片的同步将在每张图片上进行4个点。 例子: 正常图片 图片失真 结果将是一个函数,
我正在尝试使用 SurfFeatureDetect 和 FLANN 匹配器检测对象。但是,代码无法准确检测图像。我还以图片格式发布了结果。 这是我在 opencv 教程中的代码 website int
我尝试做 this ,我发现 this 。他的问题不是我想问的,但我想做同样的事情。我可以在图像上找到特征并绘制特征描述符,但是对象周围的边界框很奇怪。抱歉,我不能在这里发布我的结果,出来的线不是矩形
引用this回答this question : What is happening is that you're considering all the keypoints detected in t
当我使用函数 cvFindHomograhpy() 获取结果时遇到问题。 它给出负坐标的结果,我现在将解释我在做什么。 我正在使用光流法进行视频稳定。我已经估计了第一帧和第二帧中特征的位置。现在,我的
我正在处理由 OpenCV 计算的单应性。我目前使用这个单应性来使用下面的函数来转换点。此函数执行我需要的任务,但我不知道它实际上是如何工作的。 谁能逐行准确地解释最后 3 行代码背后的逻辑/理论,我
我正在尝试计算视频的两个连续帧之间的比例、旋转和平移。所以基本上我匹配了关键点,然后使用 opencv 函数 findHomography() 来计算单应矩阵。 homography = findHo
我在将检测到的对象的轮廓放在正确位置时遇到了一些问题,就好像坐标在错误的位置一样。我将 hessian 设置为 2000,并且过滤了小于最小距离 3 倍的匹配项。任何帮助,将不胜感激。 运行匹配和单应
我一直在尝试编译this Android Studio 2.2 中的源代码,使用 Android NDK、OpenCV-2.4.10 和 OpenCV-2.4.10-android-sdk。我已经能够
在我的 Python/OpenCV 代码中,我使用随机单应性来模拟视点变化(我正在评估兴趣点检测器并希望避免搜索图像对)。 是否可以计算对极线和一幅图像及其扭曲版本之间的基本矩阵?我拥有的唯一信息是我
对不起,如果这听起来很愚蠢,但我真的需要问这个问题。 一旦计算出单应性,我能否使用它来将在一台相机中检测到的物体中心的二维坐标作为二维坐标投影到另一台立体相机? 最佳答案 一旦您拥有映射两个相机之间转
我有两张图片(A 和 B),一张与另一张略有扭曲,它们之间存在平移、旋转和比例差异(例如,这些图片:) Ssoooooooo 我需要在图片 B 中应用一种变换,以便补偿存在的失真/平移/旋转,使两张图
我正在使用光流来跟踪一些功能,我是初学者,必须遵循这些步骤 匹配良好的特征进行跟踪 对它们进行 Lucas-Kanade 算法 查找第一帧和当前帧之间的单应性 进行相机校准 分解单应图 现在我不明白的
我正在使用光流来跟踪一些功能,我是初学者,必须遵循这些步骤 匹配良好的特征进行跟踪 对它们进行 Lucas-Kanade 算法 查找第一帧和当前帧之间的单应性 进行相机校准 分解单应图 现在我不明白的
库:OpenCV目标:Android (OpenCV4Android) 我尝试计算世界平面(例如监视器屏幕)的单应性以获得相机姿势,对其进行变换并将点重新投影回以用于跟踪任务。我正在使用 OpenCV
使用 JavaCV。我在 ArrayList 中有 2 组 CvPoint2D32f 点,一组来自手机的图像采集器,另一组来自恒定的已知图像源。 我想应用 cvFindHomogrpahy() 方法,
我正在尝试通过 python 使用 opencv 在火车图像中查找多个对象,并将其与从查询图像中检测到的关键点进行匹配。对于我的情况,我正在尝试检测下面提供的图像中的网球场.我看了网上的教程,发现只能
我正在使用 Opencv python 接口(interface)并获得了单应矩阵 H。它似乎工作正常,因为我可以使用扭曲透视从源图像中获取扭曲图像。我现在尝试使用 H 和 Inverse H 在两个
我是一名优秀的程序员,十分优秀!