图片1:
图片2:
需求说明:
1.不使用深度学习,机器学习之类的算法,就使用python+opencv
2.从图片1中识别出图片2中用红色框圈出的两个零部件;
3.判断两个零部件是否位置对齐(如图1中所处位置)。
图片1:
需求说明:
1.不使用深度学习,机器学习之类的算法,就使用python+opencv
2.从图片1中识别出图片2中用红色框圈出的两个零部件;
3.判断两个零部件是否位置对齐(如图1中所处位置)。
为了实现从图片1中识别出图片2中用红色框圈出的两个零部件,并判断它们是否位置对齐,可以使用以下代码作为参考:
import cv2
import numpy as np
def detect_and_match_parts(image1, image2, template1, template2):
# 读取图像和模板
img1 = cv2.imread(image1)
img2 = cv2.imread(image2)
temp1 = cv2.imread(template1, 0)
temp2 = cv2.imread(template2, 0)
# 使用模板匹配方法进行目标识别
res1 = cv2.matchTemplate(img1, temp1, cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(img2, temp2, cv2.TM_CCOEFF_NORMED)
# 设置匹配结果的阈值
threshold = 0.8
# 获取匹配结果中符合阈值的位置
loc1 = np.where(res1 >= threshold)
loc2 = np.where(res2 >= threshold)
# 检查两个零部件是否位置对齐
aligned = False
for pt1 in zip(*loc1[::-1]):
for pt2 in zip(*loc2[::-1]):
# 计算两个零部件的位置差
dx = pt2[0] - pt1[0]
dy = pt2[1] - pt1[1]
# 如果位置差小于一定阈值,则判定为位置对齐
if abs(dx) < 10 and abs(dy) < 10:
aligned = True
# 在图像上绘制矩形框标记零部件
cv2.rectangle(img1, pt1, (pt1[0] + temp1.shape[1], pt1[1] + temp1.shape[0]), (0, 0, 255), 2)
cv2.rectangle(img2, pt2, (pt2[0] + temp2.shape[1], pt2[1] + temp2.shape[0]), (0, 0, 255), 2)
break
# 显示结果图像
cv2.imshow("Image 1", img1)
cv2.imshow("Image 2", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
return aligned
# 调用函数进行目标识别和位置对齐判断
aligned = detect_and_match_parts("image1.jpg", "image2.jpg", "template1.jpg", "template2.jpg")
if aligned:
print("两个零部件位置对齐")
else:
print("两个零部件未位置对齐")
请确保将image1.jpg、image2.jpg、template1.jpg和template2.jpg替换为实际的文件路径,这些文件包括了图片1、图片2以及红色框圈出的两个零部件的模板图像。
该代码会在图片1和图片2中进行模板匹配,找到与模板1和模板2匹配的位置。然后,通过计算两个零部件的位置差,判断它们是否位置对齐。如果位置差较小,则在图片1和图片2上绘制矩形框标记零部件。
最后,通过调用cv2.imshow显示结果图像,并根据位置对齐的结果输出相应的信息。