企鹅在哪里出现
环境准备
本文基于Python实现零门槛检测,无需复杂模型训练,新手按步骤复制操作即可完成,所有工具均为免费开源工具,不需要付费。
1. 安装项目依赖
提前确认你的电脑已经安装Python3.6及以上版本,打开电脑的命令提示符(Windows系统按Win+R输入cmd回车即可打开),Mac和Linux系统直接打开终端,执行以下命令即可完成所有依赖的安装:
``` pip install opencv-python numpy ```
如果安装速度过慢,可以直接使用国内清华镜像源安装,执行以下命令即可:
``` pip install opencv-python numpy -i https://pypi.tuna.tsinghua.edu.cn/simple ```
2. 准备企鹅模板图
模板匹配是本方案的核心算法,需要一张仅包含单个企鹅的清晰模板图,要求模板图中的企鹅姿态和你要检测的图片中的企鹅姿态尽量接近,大小尽量接近。将准备好的模板图保存到你准备放代码的文件夹中,命名为 penguin_template.jpg。如果你没有合适的模板,可以直接保存公开的标准模板使用:https://s2.loli.net/2024/05/22/9XZkYqg7fRvjLdS.jpg,必须保证文件名和存放位置正确,这是最常见的出错点。
核心实操步骤
1. 创建检测代码文件
在存放模板图的同一个文件夹中,新建一个文本文件,重命名为 find_penguin.py,将以下完整代码直接复制到文件中,不需要修改任何默认配置:
```
import cv2
import numpy as np
def get_penguin_position(target_image_path, template_path="penguin_template.jpg", match_threshold=0.8):
读取输入图片和模板
target_img = cv2.imread(target_image_path)
template = cv2.imread(template_path)
检查图片读取是否成功
if target_img is None:
raise FileNotFoundError(f"待检测图片{target_image_path}不存在,检查文件名和路径")
if template is None:
raise FileNotFoundError(f"企鹅模板{template_path}不存在,检查文件名和路径")
获取模板尺寸
h, w = template.shape[:2]
执行归一化相关系数匹配,准确率高于其他匹配算法
match_result = cv2.matchTemplate(target_img, template, cv2.TM_CCOEFF_NORMED)
筛选出符合阈值的匹配位置
match_locations = np.where(match_result >= match_threshold)
penguin_positions = []
遍历所有匹配位置,去重后保存
for pt in zip(match_locations[::-1]):
去除重叠的重复检测框
overlap = False
for saved_pos in penguin_positions:
dx = abs(pt[0] - saved_pos["top_left_x"])
dy = abs(pt[1] - saved_pos["top_left_y"])
if dx < w/2 and dy < h/2:
overlap = True
break
if not overlap:
pos_info = {
"top_left_x": pt[0],
"top_left_y": pt[1],
"bottom_right_x": pt[0] + w,
"bottom_right_y": pt[1] + h
}
penguin_positions.append(pos_info)
在结果图中用红色方框标记企鹅位置
cv2.rectangle(target_img, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
保存标记后的结果图片
cv2.imwrite("penguin_detect_result.jpg", target_img)
return penguin_positions
if __name__ == "__main__":
此处修改为你的待检测图片文件名
INPUT_IMAGE = "test.jpg"
try:
positions = get_penguin_position(INPUT_IMAGE)
if positions:
print("检测成功!企鹅出现位置如下:")
for i, pos in enumerate(positions, 1):
print(f"第{i}只企鹅:左上角坐标({pos['top_left_x']}, {pos['top_left_y']}),右下角坐标({pos['bottom_right_x']}, {pos['bottom_right_y']})")
print("已生成标记位置的结果图片:penguin_detect_result.jpg,保存在当前文件夹")
else:
print("未在输入图片中检测到企鹅出现")
except Exception as e:
print(f"检测出错:{str(e)}")
```
2. 配置待检测图片
把你需要检测的目标图片(也就是你要找企鹅的那张图片)放到同一个文件夹中,找到代码中 INPUT_IMAGE = "test.jpg"这一行,将引号中的 test.jpg 修改为你自己的目标图片的完整文件名,包含后缀名,比如你的图片叫 trip_photo.png,就改成 INPUT_IMAGE = "trip_photo.png"。注意Windows系统默认会隐藏已知文件类型的后缀,需要先打开文件扩展名显示,避免出现文件名实际是test.jpg.jpg的错误,修改完成后保存代码文件。
3. 运行得到结果
打开命令提示符/终端,切换到代码所在的文件夹(比如代码放在D盘的penguin文件夹,就输入cd D:\penguin后回车),然后执行以下命令:
``` python find_penguin.py ```
运行完成后,你会直接在命令行看到所有企鹅出现的坐标信息,同时当前文件夹会生成一张penguin_detect_result.jpg图片,打开后就能看到用红色方框标记出来的所有企鹅位置,直观看到企鹅在哪里出现。
常见问题排查
- 提示找不到图片文件:首先检查模板图和目标图是否真的和代码放在同一个文件夹,然后检查文件名拼写是否完全正确,包括后缀名,区分大小写,关闭Windows的隐藏后缀选项后再次确认。
- 明明有企鹅却检测不出来:第一,模板图和目标图中企鹅的大小差太多,重新做一张和目标企鹅大小接近的模板图;第二,匹配阈值太高,把代码中的
match_threshold=0.8改成0.7,降低匹配要求后重新运行。 - 检测出很多不是企鹅的位置:匹配阈值太低,把
match_threshold=0.8改成0.85或者0.9,提升匹配严格度即可解决。 - 多个挨在一起的企鹅被检测成一个:说明你的模板图尺寸比企鹅实际尺寸小,重新裁剪模板,让模板尺寸和目标企鹅一致即可。
本方案所有步骤都是开箱即用,没有复杂的环境配置和模型训练,新手按照步骤操作即可在10分钟内得到准确结果,直接定位图片中企鹅出现的位置。
版权保护: 本文由 741卡盟 原创,转载请保留链接: http://741ka.com/gamenews/21422.html
- 上一篇:PSP恶魔城系列
- 下一篇:怪物猎人崛起大剑招式详解
