cv2.cornerHarris返回像素坐标
时间: 2023-10-02 10:06:58 浏览: 42
cv2.cornerHarris函数返回的是一个浮点数数组,表示每个像素的角点响应值。它并不直接返回像素坐标。要获取角点的像素坐标,你需要根据阈值对角点响应值进行筛选,并通过numpy库的函数找到对应的像素坐标。你可以使用np.where函数来实现这一点。
首先,你需要设定一个阈值来筛选角点。然后,使用np.where函数来找到角点响应值大于阈值的像素坐标。
以下是一个示例代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg', 0)
# 设定角点检测的参数
dst = cv2.cornerHarris(img, 2, 3, 0.04)
# 设定阈值,筛选角点
threshold = 0.01 * dst.max()
corner_coordinates = np.where(dst > threshold)
# 打印角点的像素坐标
for i in range(len(corner_coordinates[0])):
x = corner_coordinates[1][i]
y = corner_coordinates[0][i]
print("Corner coordinate: ({}, {})".format(x, y))
```
请注意,这只是一个示例代码,你可能需要根据你的具体需求进行适当的修改。
相关问题
cv2.cornerHarris 例子
cv2.cornerHarris是OpenCV中用于角点检测的函数,它可以检测出图像中的拐角,返回角点图像。
下面是一个使用cv2.cornerHarris函数的简单例子:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 转换成灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 使用cv2.cornerHarris函数进行角点检测
dst = cv2.cornerHarris(gray,2,3,0.04)
# 结果转换为uint8类型的图像
dst = cv2.convertScaleAbs(dst)
# 在原图像上绘制角点
img[dst>0.01*dst.max()]=[0,0,255]
# 显示图像
cv2.imshow('dst',img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
```
在这个例子中,首先读入了一张图片,将其转换为灰度图像,然后使用cv2.cornerHarris函数进行角点检测,返回的结果dst是一个和原图像大小相同的单通道图像,其中每个像素代表该点的角点响应值。
最后,我们将结果转换为uint8类型的图像,找到大于0.01倍最大响应值的像素点,将其在原图像上标记为红色,最终显示结果。
介绍cv2.cornerHarris
`cv2.cornerHarris` 是 OpenCV 中用于检测角点(Corner)的函数。角点是图像中比较特殊的点,它们是两条边缘线交叉处的点,通常被用于图像识别、三维重建等领域。
`cv2.cornerHarris` 函数的调用形式如下:
```
dst = cv2.cornerHarris(src, blockSize, ksize, k)
```
其中:
- `src`:待检测的输入图像,必须为单通道浮点型图像。
- `blockSize`:角点检测时考虑的邻域大小,一般取值为 2、3、4、5、6、7 等。
- `ksize`:Sobel 算子的大小,一般取值为 3。
- `k`:角点检测参数,一般取值范围为 0.04~0.06。
函数的返回值是一个与输入图像大小相同的单通道浮点型图像,其中图像的每个像素值表示该点的角点响应程度,响应程度越高则表示该点越有可能是角点。
使用 `cv2.cornerHarris` 函数进行角点检测的一般步骤如下:
1. 读入待检测的图像并将其转换为灰度图像。
2. 对灰度图像进行角点检测。
3. 根据角点响应程度对图像中的角点进行筛选。
4. 在原图像中标注出检测到的角点。
值得注意的是,`cv2.cornerHarris` 函数只能检测到图像中的角点,对于其他特征点(如直线端点、交叉点等),需要使用其他的算法进行检测。