检测图片中飞机的python代码
时间: 2023-08-18 16:27:25 浏览: 165
以下是一个使用 Python 和 OpenCV 库实现检测图片中飞机的示例代码。在这个例子中,我们使用了基于特征描述符的目标检测方法来检测飞机。
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.jpg')
# 加载飞机特征描述符
detector = cv2.xfeatures2d.SIFT_create()
train_img = cv2.imread('airplane.jpg')
train_gray = cv2.cvtColor(train_img, cv2.COLOR_BGR2GRAY)
train_kp, train_des = detector.detectAndCompute(train_gray, None)
# 使用 FLANN 匹配器进行特征匹配
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
kp, des = detector.detectAndCompute(img, None)
matches = flann.knnMatch(des, train_des, k=2)
# 选择好的匹配点
good_matches = []
for m, n in matches:
if m.distance < 0.7 * n.distance:
good_matches.append(m)
# 检测到目标对象
if len(good_matches) > 10:
src_pts = np.float32([kp[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
dst_pts = np.float32([train_kp[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
h, w = train_gray.shape
pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
dst = cv2.perspectiveTransform(pts, M)
cv2.polylines(img, [np.int32(dst)], True, (0, 255, 0), 3)
# 显示图像
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先读取了一张测试图像和一张包含飞机的训练图像。然后,我们使用 SIFT 特征描述符来提取图像的关键点和特征描述符。接下来,我们使用 FLANN 匹配器来进行特征匹配,并选择好的匹配点。如果匹配点数量超过 10 个,则认为检测到了目标对象。最后,我们使用 `findHomography` 函数来计算透视变换矩阵,并使用 `perspectiveTransform` 函数将图像中的四个角点变换为目标对象的位置。最后,我们使用 `polylines` 函数在图像中标记检测到的目标对象。
阅读全文