import aircv
import cv2
class image_util:
# 判断img_target是否在img_source内出现,若存在则提供在图片img_source中的位置
def match_pic(self,img_source, img_target):
"""
进行图片的匹配
"""
imsrc = aircv.imread(img_source)
imobj = aircv.imread(img_target)
pos = aircv.find_template(imsrc, imobj, rgb=True, bgremove=True)
if not pos:
return None, None, None, None
left_top = pos['rectangle'][0] # 左上
right_bottom = pos['rectangle'][3] # 右下
circle_center_pos = pos['result'] # 中心点坐标
circle_center_pos = tuple(map(int, circle_center_pos))
confidence = pos['confidence'] # 准确率
print('准确率:', confidence)
#print(circle_center_pos) # 坐标位置
return circle_center_pos, left_top, right_bottom, confidence
# 在图片img_source内标记出 中心点为pos 左上点为left_top 右下点为right_bottom 的空心图形
def draw_box(self,img_source, pos, left_top, right_bottom, circle_radius, color, line_width):
"""
将小图在大图中圈出来
"""
if not pos:
print('pos is null')
return
# 框出圆形
cv2.circle(img_source, pos, circle_radius, color, line_width)
# 框出矩形
cv2.rectangle(img_source, left_top, right_bottom, color, line_width) # 左上,右下
# 创建窗口时候可以鼠标随意拖动窗口改变大小
cv2.namedWindow("objDetect", 0)
# 设置长宽大小为640*480
cv2.resizeWindow("objDetect", 640, 480)
# 移动窗口到(200,200)坐标
cv2.moveWindow("objDetect", 200, 200)
cv2.imshow('objDetect', imsrc)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
dir="D:/Program/Python/wg/yaomo"
iu = image_util()
img_source = dir+"/base.png"
img_target = dir+"/gj.png"
circle_center_pos, left_top, right_bottom, pos = iu.match_pic(img_source, img_target)
print(circle_center_pos[0],circle_center_pos[1])
# 画线的属性
circle_radius = 40
color = (255, 0, 0)
line_width = 5
imsrc = aircv.imread(img_source)
iu.draw_box(imsrc, circle_center_pos, left_top, right_bottom, circle_radius, color, line_width)
网友评论