Python 调用 Halcon 模板匹配实现目标定位

更多资料获取
📚 个人网站:ipengtao.com
Halcon 是一款功能强大的机器视觉库,用于图像处理和分析。它提供了丰富的图像处理功能,包括模板匹配,用于在图像中查找和定位特定的目标。在本文中,将介绍如何使用 Python 调用 Halcon 库来实现目标定位,并提供详细的示例代码。
准备工作
在开始之前,需要完成以下准备工作:
-
安装 Halcon 软件并获得相应的许可证。Halcon 是商业软件,需要从 MVTec 公司获取许可证并安装软件。
-
安装 Halcon 的 Python 扩展包
halconpy。可以通过 pip 安装它:
pip install halconpy
- 创建一个包含待处理图像和模板图像的文件夹。确保目标图像和模板图像已准备好。
导入 Halcon 库
首先,导入 Halcon 库以及其他必要的库:
import halcon as ha
import numpy as np
import cv2
加载图像和模板
接下来,将加载目标图像和模板图像。确保这两个图像位于之前创建的文件夹中。
# 指定目标图像和模板图像的文件路径
image_path = "path/to/your/target_image.png"
template_path = "path/to/your/template_image.png"
# 使用 OpenCV 加载图像
target_image = cv2.imread(image_path, cv2.IMREAD_COLOR)
template_image = cv2.imread(template_path, cv2.IMREAD_COLOR)
转换图像为 Halcon 图像对象
Halcon 使用自己的图像对象表示图像,因此需要将 OpenCV 图像转换为 Halcon 图像对象。
# 转换目标图像为 Halcon 图像对象
ha_target_image = ha.GenImageInterleaved(
np.flip(target_image, axis=2).tobytes(),
'bgr',
target_image.shape[1],
target_image.shape[0],
0,
ha.HalconPixelFormat("byte"),
)
# 转换模板图像为 Halcon 图像对象
ha_template_image = ha.GenImageInterleaved(
np.flip(template_image, axis=2).tobytes(),
'bgr',
template_image.shape[1],
template_image.shape[0],
0,
ha.HalconPixelFormat("byte"),
)
进行模板匹配
现在已经加载了图像并将其转换为 Halcon 图像对象,接下来将执行模板匹配。
# 使用模板匹配算法进行匹配
matching_result = ha.FindTemplate(
ha_target_image,
ha_template_image,
ha.HalconModelID("use_polarity"),
ha.HalconMetric("use_polarity"),
0,
360,
0.5,
1,
)
# 获取匹配结果的坐标
row, column, _, _ = ha.TupleFirstMatch(matching_result)
FindTemplate 函数执行模板匹配,它会返回匹配结果的图像。从匹配结果中提取了目标的位置坐标 (row, column)。
可视化结果
为了可视化结果,可以使用 OpenCV 将目标位置标记在目标图像上。
# 在目标图像上标记目标位置
cv2.rectangle(
target_image,
(int(column), int(row)),
(int(column) + template_image.shape[1], int(row) + template_image.shape[0]),
(0, 255, 0),
2,
)
# 显示结果图像
cv2.imshow("Result", target_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
这将在目标图像上绘制一个绿色矩形框来标记目标的位置。
完整示例代码
下面是一个完整的示例代码,将之前的步骤整合在一起:
import halcon as ha
import numpy as np
import cv2
# 指定目标图像和模板图像的文件路径
image_path = "path/to/your/target_image.png"
template_path = "path/to/your/template_image.png"
# 使用 OpenCV 加载图像
target_image = cv2.imread(image_path, cv2.IMREAD_COLOR)
template_image = cv2.imread(template_path, cv2.IMREAD_COLOR)
# 转换目标图像为 Halcon 图像对象
ha_target_image = ha.GenImageInterleaved(
np.flip(target_image, axis=2).tobytes(),
'bgr',
target_image.shape[1],
target_image.shape[0],
0,
ha.HalconPixelFormat("byte"),
)
# 转换模板图像为 Halcon 图像对象
ha_template_image = ha.GenImageInterleaved(
np.flip(template_image, axis=2).tobytes(),
'bgr',
template_image.shape[1],
template_image.shape[0],
0,
ha.HalconPixelFormat("byte"),
)
# 使用模板匹配算法进行匹配
matching_result = ha.FindTemplate(
ha_target_image,
ha_template_image,
ha.HalconModelID("use_polarity"),
ha.HalconMetric("use_polarity"),
0,
360,
0.5,
1,
)
# 获取匹配结果的坐标
row, column, _, _ = ha.TupleFirstMatch(matching_result)
# 在目标图像上标记目标位置
cv2.rectangle(
target_image,
(int(column), int(row)),
(int(column) + template_image.shape[1], int(row) + template_image.shape[0]),
(0, 255, 0),
2,
)
# 显示结果图像
cv2.imshow("Result", target_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
总结
通过使用 Python 调用 Halcon 库,可以轻松地实现目标定位和模板匹配。在本文中,学习了如何加载图像、进行模板匹配并可视化结果。这只是 Halcon 提供的众多功能之一,可以根据需求进一步探索和扩展应用。请注意,Halcon 是商业软件,需要购买许可证才能使用。希望本文能帮助入门 Halcon 图像处理,为机器视觉项目提供有力支持。
Python学习路线

更多资料获取
📚 个人网站:ipengtao.com
如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。
更多推荐
所有评论(0)