编写一个Harris角点检测图片的程序,自动输出角的大小,将结果保存在B文件夹中
时间: 2024-05-05 12:21:07 浏览: 9
以下是一个简单的 Harris 角点检测程序,使用 Python 和 OpenCV 库实现:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('A/image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算 Harris 角点
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 通过 dilation 找到角点
dst = cv2.dilate(dst, None)
# 设定阈值,将角点标记为红色
img[dst > 0.01 * dst.max()] = [0, 0, 255]
# 输出角点大小
print("角点数量:", np.sum(dst > 0.01 * dst.max()))
# 保存结果
cv2.imwrite("B/result.jpg", img)
```
该程序首先读取图片并将其转换为灰度图像。然后通过 `cv2.cornerHarris` 函数计算 Harris 角点的响应值,并通过 dilation 处理找到角点。最后筛选出响应值大于阈值的角点,并将其标记为红色。程序最后输出角点数量,并将结果保存在 B 文件夹中。
相关问题
编写一个Harris角点检测图片的程序,自动输出角的大小
好的,这里有一个Python实现的Harris角点检测程序,使用OpenCV库进行图像处理:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('image.jpg')
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算导数
dx = cv2.Sobel(gray, cv2.CV_64F, 1, 0)
dy = cv2.Sobel(gray, cv2.CV_64F, 0, 1)
# 计算Ixx, Ixy, Iyy
Ixx = dx * dx
Ixy = dx * dy
Iyy = dy * dy
# 高斯滤波
kernel_size = 3
sigma = 1.0
ksize = int(2 * np.ceil(2 * sigma) + 1)
gaussian = cv2.getGaussianKernel(ksize, sigma)
gaussian = np.outer(gaussian, gaussian.transpose())
Ixx = cv2.filter2D(Ixx, -1, gaussian)
Ixy = cv2.filter2D(Ixy, -1, gaussian)
Iyy = cv2.filter2D(Iyy, -1, gaussian)
# 计算Harris响应
k = 0.04
det = Ixx * Iyy - Ixy * Ixy
trace = Ixx + Iyy
H = det - k * trace * trace
# 非极大值抑制
threshold = 0.01 * H.max()
kernel_size = 3
maxima = cv2.dilate(H, np.ones((kernel_size, kernel_size))) == H
H[~maxima] = 0
# 输出角点大小
corners = np.where(H > threshold)
for i in range(len(corners[0])):
x = corners[0][i]
y = corners[1][i]
size = H[x][y]
print("角点(%d, %d)大小为%.2f" % (x, y, size))
# 显示结果
cv2.imshow('Harris角点检测', img)
cv2.waitKey(0)
```
请将代码中的`image.jpg`替换为需要检测角点的图片路径。程序会自动输出检测到的角点位置和大小。
请给我一个检测彩色图片的Harris角点的Matlab程序
这里是一个使用 Matlab 检测彩色图片中的 Harris 角点的程序:
```
% 读取彩色图片
im = imread('image.jpg');
% 将图片转换为灰度图
im_gray = rgb2gray(im);
% 计算 Harris 角点
corners = detectHarrisFeatures(im_gray);
% 在原图上绘制角点
imshow(im); hold on;
plot(corners.selectStrongest(50));
```
希望这能帮到你!