探索机器视觉:从工业相机采集到模板匹配
机器视觉,OpenCV,Qt,工业相机采集,图像采集,图像处理,卡尺工具,找线,找圆,颜色检测,模板匹配,形状匹配,海康工业相机采集+基于形状的模板匹配界面,提前说明,形状匹配算法封装成dll直接调用的,其他都是源码,是不错的学习资料,程序资料在当今的工业自动化和智能制造领域,机器视觉技术就像是一双敏锐的“眼睛”,能让机器像人类一样“看”懂周围的世界。今天咱们就来聊聊机器视觉里的那些事儿,涉及到
机器视觉,OpenCV,Qt,工业相机采集,图像采集,图像处理,卡尺工具,找线,找圆,颜色检测,模板匹配,形状匹配,海康工业相机采集+基于形状的模板匹配界面,提前说明,形状匹配算法封装成dll直接调用的,其他都是源码,是不错的学习资料,程序资料

在当今的工业自动化和智能制造领域,机器视觉技术就像是一双敏锐的“眼睛”,能让机器像人类一样“看”懂周围的世界。今天咱们就来聊聊机器视觉里的那些事儿,涉及到 OpenCV、Qt、工业相机采集以及各种实用的图像处理工具。
工业相机采集与图像获取
工业相机采集是机器视觉系统的第一步,就好比我们人类睁开眼睛去接收外界的信息。这里我们选用海康工业相机,它在工业领域可是相当受欢迎。下面是一段简单的 Python 代码示例,用于海康工业相机的图像采集:
import cv2
from hikvisionapi import Client
# 连接到海康相机
cam = Client('http://192.168.1.100', 'admin', 'password')
# 获取图像
response = cam.Streaming.channels[101].picture(method='get', type='opaque_data')
with open('temp.jpg', 'wb') as f:
f.write(response.content)
# 使用 OpenCV 读取图像
image = cv2.imread('temp.jpg')
cv2.imshow('Captured Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码分析
这段代码首先通过 hikvisionapi 库连接到海康相机,这里需要填写相机的 IP 地址、用户名和密码。接着,我们从相机的指定通道获取图像数据,并将其保存为 temp.jpg 文件。最后,使用 OpenCV 的 imread 函数读取该图像,并通过 imshow 函数显示出来。
图像处理与工具应用
采集到图像后,就需要对其进行处理和分析。这里介绍几种常见的图像处理工具。
卡尺工具与找线
卡尺工具可以帮助我们测量图像中物体的尺寸,而找线则是确定图像中线条的位置和方向。以下是使用 OpenCV 进行找线的示例代码:
import cv2
import numpy as np
# 读取图像
image = cv2.imread('temp.jpg', 0)
# 边缘检测
edges = cv2.Canny(image, 50, 150)
# 霍夫变换找线
lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=50, minLineLength=50, maxLineGap=10)
# 绘制检测到的线
if lines is not None:
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imshow('Lines Detected', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码分析
首先,我们以灰度模式读取图像。然后使用 Canny 边缘检测算法提取图像的边缘。接着,通过霍夫变换(HoughLinesP)在边缘图像中检测直线。最后,将检测到的直线绘制在原始图像上并显示出来。
找圆与颜色检测
找圆可以帮助我们定位图像中的圆形物体,而颜色检测则可以根据颜色特征识别特定的物体。以下是一个简单的颜色检测示例代码:
import cv2
import numpy as np
# 读取图像
image = cv2.imread('temp.jpg')
# 转换到 HSV 颜色空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义颜色范围(这里以红色为例)
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100])
upper_red2 = np.array([180, 255, 255])
# 创建掩码
mask1 = cv2.inRange(hsv, lower_red, upper_red)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)
# 应用掩码
result = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow('Color Detection', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码分析
我们先将图像从 BGR 颜色空间转换到 HSV 颜色空间,因为 HSV 更适合进行颜色检测。然后定义红色的颜色范围,创建两个掩码(因为红色在 HSV 空间中不连续),并将它们合并。最后,通过按位与操作将掩码应用到原始图像上,得到只包含红色部分的图像。
模板匹配与形状匹配
模板匹配和形状匹配是机器视觉中常用的目标识别方法。这里我们主要介绍基于形状的模板匹配,并且形状匹配算法已经封装成 DLL 直接调用。
基于形状的模板匹配界面
我们使用 Qt 来创建一个基于形状的模板匹配界面。以下是一个简单的 Qt 界面代码示例:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
import cv2
import numpy as np
class TemplateMatchingApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 读取模板和图像
template = cv2.imread('template.jpg', 0)
image = cv2.imread('image.jpg', 0)
# 进行模板匹配
result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc
h, w = template.shape
# 在图像上绘制匹配结果
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(image, top_left, bottom_right, 255, 2)
# 将 OpenCV 图像转换为 Qt 图像
height, width = image.shape
bytesPerLine = width
qImg = QImage(image.data, width, height, bytesPerLine, QImage.Format_Grayscale8)
# 创建 QLabel 显示图像
label = QLabel(self)
pixmap = QPixmap.fromImage(qImg)
label.setPixmap(pixmap)
# 设置布局
layout = QVBoxLayout()
layout.addWidget(label)
self.setLayout(layout)
self.setWindowTitle('Template Matching')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = TemplateMatchingApp()
sys.exit(app.exec_())
代码分析
在这个 Qt 界面代码中,我们首先读取模板图像和待匹配的图像。然后使用 OpenCV 的 matchTemplate 函数进行模板匹配,找到匹配度最高的位置。接着在原始图像上绘制矩形框标记匹配结果。最后,将 OpenCV 图像转换为 Qt 图像,并使用 QLabel 显示在界面上。

机器视觉,OpenCV,Qt,工业相机采集,图像采集,图像处理,卡尺工具,找线,找圆,颜色检测,模板匹配,形状匹配,海康工业相机采集+基于形状的模板匹配界面,提前说明,形状匹配算法封装成dll直接调用的,其他都是源码,是不错的学习资料,程序资料

这些程序资料可是不错的学习资料,涵盖了从工业相机采集到各种图像处理和模板匹配的内容,大家可以根据自己的需求进行学习和扩展。希望大家在机器视觉的学习和实践中取得好成绩!





更多推荐
所有评论(0)