Harris角点检测python具体代码不调用用函数
时间: 2023-06-09 20:07:11 浏览: 49
以下是 Harris 角点检测的 Python 代码,不调用函数:
```
import cv2
import numpy as np
# 读入图片
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算图像中每个像素的角点响应函数R
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 反转R矩阵,以便之后更好的筛选角点
dst = cv2.dilate(dst, None)
# 设定阈值,只有大于阈值的像素点才被认为是角点
img[dst > 0.01 * dst.max()] = [0, 0, 255]
# 显示结果
cv2.imshow('Harris Corner Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
请注意,此代码仅仅是提供一个示例。如果你需要更多帮助,请查看 OpenCV 官方文档。
相关问题
harris角点检测python代码
以下是Harris角点检测的Python代码示例:
```
import cv2
import numpy as np
# 读取图像
img = cv2.imread('lena.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算Harris角点
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 通过阈值筛选角点
img[dst > 0.01 * dst.max()] = [0, 0, 255]
cv2.imshow('Harris Corner Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码中,我们首先读取了一张图像,并将其转化为灰度图。接着,我们调用了OpenCV的`cv2.cornerHarris`函数来计算Harris角点。这个函数的第一个参数是输入图像,第二个参数是角点检测窗口的大小,第三个参数是Sobel算子的大小,第四个参数是Harris角点检测的自由参数。此外,我们还通过阈值筛选出了Harris角点,并将其在原图上用红色标出。最后,我们展示了标出角点的图像。
手写Harris角点检测代码,不调用cv2.cornerHarris函数
Harris角点检测算法是一种经典的计算机视觉算法,可以用于图像特征提取、目标跟踪等应用。下面是一个基于numpy实现的Harris角点检测算法的代码示例:
```python
import numpy as np
import cv2
# 读取图像
img = cv2.imread('test.jpg')
# 转化为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 设置窗口大小和卷积核大小
window_size = 3
kernel_size = 3
# 计算图像梯度
dx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=kernel_size)
dy = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=kernel_size)
# 计算Harris矩阵的三个分量
Ixx = dx**2
Ixy = dx*dy
Iyy = dy**2
# 对Harris矩阵的三个分量进行高斯滤波
ksize = (window_size, window_size)
sigma = 1.5
Ixx = cv2.GaussianBlur(Ixx, ksize, sigma)
Ixy = cv2.GaussianBlur(Ixy, ksize, sigma)
Iyy = cv2.GaussianBlur(Iyy, ksize, sigma)
# 计算Harris响应函数
k = 0.04
det = Ixx*Iyy - Ixy**2
trace = Ixx + Iyy
R = det - k*trace**2
# 设置阈值并进行非极大值抑制
threshold = 0.01*np.max(R)
R[R < threshold] = 0
R_nms = cv2.dilate(R, np.ones((3, 3), np.uint8))
R_nms[R < R_nms] = 0
# 显示角点
corners = np.argwhere(R_nms > 0)
for corner in corners:
x, y = corner
cv2.circle(img, (y, x), 3, (0, 255, 0), -1)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上代码先读取了一张测试图像,然后将其转化为灰度图像,计算了图像在x和y方向上的梯度,并根据梯度计算Harris矩阵的三个分量。接着对这三个分量进行高斯滤波,计算Harris响应函数,并进行非极大值抑制,最后在角点处画圆。