我正在处理带有对象的图像。我使用canny边缘检测和轮廓来检测和绘制其中对象的边缘。然后我使用SIFT和SURF来检测对象中的关键点。这是我一直在编写的示例代码
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread(image)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray, 100,200)
image, contours, hierarchy = cv.findContours(edges, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
outimg = cv.drawContours(img, contours, -1, (0,255,0), 3)
sift = cv.xfeatures2d_SIFT.create()
kp, des = sift.detectAndCompute(outimg,None)
有没有办法去除边缘上的关键点?用例子来回答会很有帮助。 谢谢
可以使用pointPolygonTest方法筛选检测到的关键点。使用检测到的轮廓作为边界多边形。您还可以定义所需的边距
Simaple示例(fot 4点轮廓):
也可以在遮罩图像上绘制轮廓,若要检查点是否在轮廓内,只需使用点坐标检查像素值,若不是0,则该点有效
似乎一切都很好: 我没有xfeatures2d,所以在这里使用了ORB功能
我仍然发现很难从给定的图像中删除关键点。如果关键点不在轮廓中,我尝试将其附加到新列表中,但在使用cv2.drawKeypoints函数时显示错误,因为新列表不是keypoint类型。这就是我到目前为止所做的工作
相关问题 更多 >
编程相关推荐