opencv角点检测输出坐标
时间: 2023-10-02 12:10:17 浏览: 115
OpenCV的角点检测函数可以输出检测到的角点的坐标。下面是使用OpenCV中的CornerHarris函数进行角点检测并输出角点坐标的示例代码:
```python
import cv2
import numpy as np
# 读入图像
img = cv2.imread('image.png')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行角点检测
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 标记角点
img[dst > 0.01 * dst.max()] = [0, 0, 255]
# 输出角点坐标
corners = np.where(dst > 0.01 * dst.max())
print(list(zip(corners[1], corners[0])))
```
在上面的代码中,`cv2.cornerHarris`函数的第一个参数是灰度图像,第二个参数是角点检测的窗口大小,第三个参数是Sobel算子的参数,第四个参数是常数k,根据经验值一般取0.04至0.06之间。函数的返回值`dst`是一个与输入图像大小相同的矩阵,其中每个像素的值表示该像素对应的角点响应强度,可以通过设置一个阈值来筛选出角点。最后,使用`np.where`函数找出响应强度大于阈值的像素位置,通过`list(zip(corners[1], corners[0]))`将其转换为坐标列表。
相关问题
opencv-python角点检测 角点排序 并输出角点坐标
OpenCV-Python提供了许多角点检测算法,包括Harris角点检测、Shi-Tomasi角点检测、FAST角点检测等。这些算法可以检测图像中的关键点,通常用于特征匹配和目标跟踪等应用。
在检测到角点之后,我们可以对它们进行排序,并输出它们的坐标。下面是一个示例代码,演示如何使用Shi-Tomasi角点检测算法检测角点、将角点按照响应值排序,并输出角点坐标:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('corner.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Shi-Tomasi角点检测
corners = cv2.goodFeaturesToTrack(gray, 25, 0.01, 10)
# 对角点按照响应值排序
corners = np.int0(corners)
corners = sorted(corners, key=lambda x: x[0][1])
# 输出角点坐标
for i in range(len(corners)):
x, y = corners[i][0]
print("Corner {}: ({},{})".format(i+1, x, y))
cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先读取了一张图像,然后使用Shi-Tomasi角点检测算法检测了25个角点,并将它们存储在corners数组中。接着,我们按照角点的y坐标对它们进行排序,并输出它们的坐标。最后,我们在图像上绘制了检测到的角点,并显示了结果。
opencv-python角点检测 使用FAST角点检测算法检测角点、将角点按照响应值排序,并输出角点坐标
OpenCV-Python中可以使用FAST角点检测算法来检测图像中的角点。以下是使用该算法进行角点检测和排序的示例代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 创建FAST角点检测器对象
fast = cv2.FastFeatureDetector_create()
# 检测图像中的角点
keypoints = fast.detect(img, None)
# 根据响应值对角点进行排序
keypoints = sorted(keypoints, key=lambda x: -x.response)
# 输出角点坐标
for kp in keypoints:
print(kp.pt)
# 在图像中可视化角点
img_with_keypoints = cv2.drawKeypoints(img, keypoints, None, color=(0, 255, 0))
# 显示图像
cv2.imshow('Image with Keypoints', img_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们首先使用`cv2.imread()`函数读取了一张图像。然后,创建了一个FAST角点检测器对象,使用`fast.detect()`函数对图像中的角点进行检测,并使用`sorted()`函数按照角点的响应值进行排序。最后,遍历排序后的角点列表,输出它们的坐标,并使用`cv2.drawKeypoints()`函数在图像中可视化角点。
运行上述代码后,我们将得到一个包含检测到的角点的图像,并输出角点的坐标。
阅读全文