更多资料获取

📚 个人网站:ipengtao.com


Halcon 是一款功能强大的机器视觉库,用于图像处理和分析。它提供了丰富的图像处理功能,包括模板匹配,用于在图像中查找和定位特定的目标。在本文中,将介绍如何使用 Python 调用 Halcon 库来实现目标定位,并提供详细的示例代码。

准备工作

在开始之前,需要完成以下准备工作:

  1. 安装 Halcon 软件并获得相应的许可证。Halcon 是商业软件,需要从 MVTec 公司获取许可证并安装软件。

  2. 安装 Halcon 的 Python 扩展包 halconpy。可以通过 pip 安装它:

pip install halconpy
  1. 创建一个包含待处理图像和模板图像的文件夹。确保目标图像和模板图像已准备好。

导入 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

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

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐