机器视觉缺陷检测源码 C++ Halcon 64位源码,qt 5.8 ,vs2015,包含所有源码,缺陷检测

在工业生产领域,机器视觉缺陷检测发挥着至关重要的作用。今天就和大家分享一下基于C++、Halcon、Qt 5.8以及VS2015搭建的机器视觉缺陷检测系统源码。

开发环境介绍

  • VS2015:作为微软强大的集成开发环境,为C++代码的编写、调试提供了丰富的工具和友好的界面。
  • Qt 5.8:一个跨平台的C++应用程序开发框架,在图形界面开发方面表现出色,能够轻松创建美观且交互性良好的用户界面。
  • Halcon:这是一款功能强大的机器视觉库,提供了大量用于图像采集、处理、分析和识别的函数与算法。

代码结构与关键部分

初始化Halcon环境

在使用Halcon前,需要在代码中初始化相关环境。以下是简单的代码示例:

#include "HalconCpp.h"
using namespace HalconCpp;

int main() {
    HOperatorSet::SetSystem("use_window_thread", "true");
    // 创建一个窗口用于显示图像
    HWindow window;
    window.OpenWindow(0, 0, 512, 512, 0, "visible", "", &window);
    return 0;
}

在这段代码中,首先通过HOperatorSet::SetSystem("usewindowthread", "true");设置Halcon使用窗口线程,这在多线程环境下使用窗口显示图像时很重要。接着创建了一个HWindow对象,并通过OpenWindow方法打开一个指定大小的窗口用于后续图像显示。

图像读取与预处理

从文件读取图像并进行预处理是缺陷检测的重要步骤。

HImage image;
image.ReadImage("your_image_path.jpg");
// 灰度化处理
HImage grayImage;
image.Rgb1ToGray(&grayImage);
// 高斯滤波平滑图像
HImage smoothedImage;
grayImage.GaussianFilter("gauss", 3, 3, &smoothedImage);

上述代码中,先用ReadImage方法读取指定路径的图像。然后将彩色图像通过Rgb1ToGray方法转换为灰度图像,这样后续处理会更简单且高效。最后使用GaussianFilter对灰度图像进行高斯滤波,参数"gauss"指定了滤波器类型,3和3分别是水平和垂直方向的标准差,通过滤波可以减少图像噪声,利于后续的缺陷特征提取。

缺陷检测算法

这里假设使用边缘检测来初步定位可能的缺陷位置。

HImage edges;
smoothedImage.EdgesSubPix("canny", 1, 20, 40, &edges);
// 对边缘图像进行形态学处理
HImage dilatedEdges;
edges.DilationCircle(5, &dilatedEdges);

EdgesSubPix函数采用Canny边缘检测算法,参数1是边缘检测的阈值,20和40分别是低阈值和高阈值。得到边缘图像后,通过DilationCircle函数进行圆形结构元素的膨胀操作,参数5是圆形结构元素的半径,这样可以将细小的边缘连接起来,便于后续分析。

结合Qt显示结果

利用Qt的界面框架,可以将检测结果以直观的方式展示给用户。

机器视觉缺陷检测源码 C++ Halcon 64位源码,qt 5.8 ,vs2015,包含所有源码,缺陷检测

在Qt项目中,创建一个用于显示图像的QLabel控件,假设其对象名为imageLabel。在C++代码中可以这样将Halcon图像转换为Qt能显示的格式并显示:

// 将Halcon图像转换为QImage
QImage qImage(smoothedImage.GetWidth(), smoothedImage.GetHeight(), QImage::Format_RGB888);
for (int y = 0; y < smoothedImage.GetHeight(); y++) {
    for (int x = 0; x < smoothedImage.GetWidth(); x++) {
        HTuple grayValue;
        smoothedImage.GetGrayval(x, y, &grayValue);
        QRgb rgb = qRgb(grayValue.I(), grayValue.I(), grayValue.I());
        qImage.setPixel(x, y, rgb);
    }
}
QPixmap pixmap = QPixmap::fromImage(qImage);
imageLabel->setPixmap(pixmap);

上述代码先创建一个与Halcon图像大小相同的QImage对象,然后遍历Halcon图像的每个像素点,获取其灰度值,并将其转换为RGB值设置到QImage中。最后通过QPixmapQImage设置到QLabel控件上进行显示。

整个基于C++、Halcon、Qt 5.8和VS2015的机器视觉缺陷检测系统,通过不同模块间的协作,实现了从图像读取、处理到缺陷检测以及结果展示的完整流程。这份64位源码包含了所有细节,希望能给相关领域的开发者一些启发与帮助,大家可以根据实际需求进一步优化和扩展。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐