模板匹配源码
来源:互联网 发布:怎么清除dnf异常数据 编辑:程序博客网 时间:2024/06/06 14:54
import cv2 import numpy as npfrom numpy import * import aircv as ac#在图像上下左右取额定大小的区域,并计算每个区域的sobel算子矩阵#定义模板此尺寸template_size = 60def getROISobel(src, index_x , index_y): global template_size xBegin = (src.shape[0]/4) * (2*index_x + 1) - (template_size/2) yBegin = (src.shape[1]/4) * (2*index_y + 1) - (template_size/2) xBegin = int(xBegin) yBegin = int(yBegin) print(src[xBegin : (xBegin + template_size), yBegin : (yBegin + template_size)].shape) after_translation_x = cv2.Sobel(src[xBegin : xBegin+template_size, yBegin : yBegin + template_size] ,cv2.CV_16S, 1, 0) after_translation_y = cv2.Sobel(src[xBegin : xBegin+template_size, yBegin : yBegin + template_size] ,cv2.CV_16S, 0, 1) after_translation_x_abs = np.fabs(after_translation_x) after_translation_y_abs = np.fabs(after_translation_y) after_translation_magnitude = cv2.addWeighted(after_translation_x_abs,0.5,after_translation_x_abs,0.5,0) return after_translation_magnitude#获取每一份sobel区域矩阵的sum值def sum(src): sum = 0 for i in range(0, src.shape[0]): for j in range(0, src.shape[1]): sum += src[i][j] return sum#返回所选模板的参数def get_position_index(region_1, region_2, region_3, region_4): index = array([0,0]) if(sum(region_1) == max(sum(region_1), sum(region_2), sum(region_3), sum(region_4))): index = array([0,0]) elif (sum(region_2) == max(sum(region_1), sum(region_2), sum(region_3), sum(region_4))): index = array([0,1]) elif (sum(region_3) == max(sum(region_1), sum(region_2), sum(region_3), sum(region_4))): index = array([1,0]) else: index = array([1,1]) return index#找到图像与模板匹配的位置坐标def findposition(img, position_index): imsrc = ac.imread('D:\\python_opencv\\source_image\\1122\\2\\1.jpg') imtemplate = imsrc[int((imsrc.shape[0]/4) * (2*position_index[0] + 1) - (template_size/2)) : int((imsrc.shape[0]/4) * (2*position_index[0] + 1) + (template_size/2)), int((imsrc.shape[1]/4) * (2*position_index[1] + 1) - (template_size/2)) : int((imsrc.shape[1]/4) * (2*position_index[1] + 1) + (template_size/2))] #第一个参数代表y方向,第二个参数代表x方向 imsrc = img # find the match position #print("imsrc", imsrc) pos = ac.find_template(imsrc, imtemplate,threshold=0.2) #print("pos", pos) center_pos = pos['result'] return center_pos#画图def draw_rectangle(img, pos_1, pos_4, color, line_width): cv2.rectangle(img, pos_1, pos_4, color, line_width) cv2.imshow('objDetect', imsrc) cv2.waitKey(0) cv2.destroyAllWindows()def translate(img, x, y): H = np.float32([[1,0,x],[0,1,y]]) rows,cols = img.shape[:2] res = cv2.warpAffine(img,H,(cols,rows)) #需要图像、变换矩阵、变换后的大小 return resdef add(a,b): # 迭代输出行 result = np.zeros((640,480)) for i in range(len(a)): # 迭代输出列 for j in range(len(a[0])): result[i][j] = a[i][j] + b[i][j] return resultdef typeconvert(a): for i in range(len(a)): # 迭代输出列 for j in range(len(a[0])): a[i][j] = a[i][j] * (256) return adef f(x): return np.float(x)def g(x): return np.int(x)if __name__ == "__main__": img = cv2.imread("D:\\python_opencv\\source_image\\1123\\1\\1.jpg",0) region_1 = getROISobel(img, 0, 0) region_2 = getROISobel(img, 0, 1) region_3 = getROISobel(img, 1, 0) region_4 = getROISobel(img, 1, 1) print(sum(region_1)) print(sum(region_2)) print(sum(region_3)) print(sum(region_4)) position_index = get_position_index(region_1, region_2, region_3, region_4) print(position_index) imsrc_1 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\1.jpg') imsrc_2 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\2.jpg') imsrc_3 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\3.jpg') imsrc_4 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\4.jpg') imsrc_5 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\5.jpg') imsrc_6 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\6.jpg') imsrc_7 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\7.jpg') imsrc_8 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\8.jpg') imsrc_9 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\9.jpg') imsrc_10 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\10.jpg') position_1 = findposition(imsrc_1, position_index) position_2 = findposition(imsrc_2, position_index) position_3 = findposition(imsrc_3, position_index) position_4 = findposition(imsrc_4, position_index) position_5 = findposition(imsrc_5, position_index) position_6 = findposition(imsrc_6, position_index) position_7 = findposition(imsrc_7, position_index) position_8 = findposition(imsrc_8, position_index) position_9 = findposition(imsrc_9, position_index) position_10 = findposition(imsrc_10, position_index) print("position_1[0]", position_1[0]) print("position_1[1]", position_1[1]) print("position_2[0]", position_2[0]) print("position_2[1]", position_2[1]) print("position_3[0]", position_3[0]) print("position_3[1]", position_3[1]) print("position_4[0]", position_4[0]) print("position_4[1]", position_4[1]) print(position_1[0] - position_2[0]) print(position_1[1] - position_2[1]) print(position_1[0] - position_3[0]) print(position_1[1] - position_3[1]) print(position_1[0] - position_4[0]) print(position_1[1] - position_4[1]) print(position_1[0] - position_5[0]) print(position_1[1] - position_5[1]) print(position_1[0] - position_6[0]) print(position_1[1] - position_6[1]) print(position_1[0] - position_7[0]) print(position_1[1] - position_7[1]) print(position_1[0] - position_8[0]) print(position_1[1] - position_8[1]) print(position_1[0] - position_9[0]) print(position_1[1] - position_9[1]) print(position_1[0] - position_10[0]) print(position_1[1] - position_10[1]) imsrc_1 = translate(imsrc_1, position_1[0] - position_1[0], position_1[1] - position_1[1]) imsrc_2 = translate(imsrc_2, position_1[0] - position_2[0], position_1[1] - position_2[1]) imsrc_3 = translate(imsrc_3, position_1[0] - position_3[0], position_1[1] - position_3[1]) imsrc_4 = translate(imsrc_4, position_1[0] - position_4[0], position_1[1] - position_4[1]) imsrc_5 = translate(imsrc_5, position_1[0] - position_5[0], position_1[1] - position_5[1]) imsrc_6 = translate(imsrc_6, position_1[0] - position_6[0], position_1[1] - position_6[1]) imsrc_7 = translate(imsrc_7, position_1[0] - position_7[0], position_1[1] - position_7[1]) imsrc_8 = translate(imsrc_8, position_1[0] - position_8[0], position_1[1] - position_8[1]) imsrc_9 = translate(imsrc_9, position_1[0] - position_9[0], position_1[1] - position_9[1]) imsrc_10 = translate(imsrc_10, position_1[0] - position_10[0], position_1[1] - position_10[1]) ''' imsrc_8 = cv2.imread('D:\\python_opencv\\source_image\\image_match\\8.jpg') imsrc_9 = cv2.imread('D:\\python_opencv\\source_image\\image_match\\9.jpg') imsrc_10 = cv2.imread('D:\\python_opencv\\source_image\\image_match\\10.jpg') ''' #imsrc_sum = add(imsrc_1, imsrc_2, imsrc_3, imsrc_4, imsrc_5, imsrc_6, imsrc_7) print(imsrc_1.shape) f2 = np.vectorize(f)#让函数矩阵化,解决只能一对一强制性变换这一要求 imsrc_1 = f2(imsrc_1) imsrc_2 = f2(imsrc_2) #imsrc_sum = imsrc_1 + imsrc_2 + imsrc_3 + imsrc_4 + imsrc_5 + imsrc_6 + imsrc_7 #imsrc_average = imsrc_sum/7 imsrc_sum = imsrc_1 + imsrc_2 + imsrc_3 + imsrc_4 + imsrc_5 + imsrc_6 + imsrc_7 + imsrc_8 + imsrc_9 + imsrc_10 imsrc_average = imsrc_sum/10 #imsrc_sum = add(imsrc_1, imsrc_2) g2 = np.vectorize(g)#让函数矩阵化,解决只能一对一强制性变换这一要求 #imsrc_average = g2(imsrc_average) #imsrc_average = np.unit8(imsrc_average) #print(g2(imsrc_average)) cv2.imshow('merge', typeconvert(g2(imsrc_average))) cv2.waitKey(0) cv2.destroyAllWindows()
second_max
import cv2 import numpy as npfrom numpy import * import aircv as ac#在图像上下左右取额定大小的区域,并计算每个区域的sobel算子矩阵#定义模板此尺寸template_size = 80def getROISobel(src, index_x , index_y): global template_size xBegin = (src.shape[0]/4) * (2*index_x + 1) - (template_size/2) yBegin = (src.shape[1]/4) * (2*index_y + 1) - (template_size/2) xBegin = int(xBegin) yBegin = int(yBegin) print(src[xBegin : (xBegin + template_size), yBegin : (yBegin + template_size)].shape) after_translation_x = cv2.Sobel(src[xBegin : xBegin+template_size, yBegin : yBegin + template_size] ,cv2.CV_16S, 1, 0) after_translation_y = cv2.Sobel(src[xBegin : xBegin+template_size, yBegin : yBegin + template_size] ,cv2.CV_16S, 0, 1) after_translation_x_abs = np.fabs(after_translation_x) after_translation_y_abs = np.fabs(after_translation_y) after_translation_magnitude = cv2.addWeighted(after_translation_x_abs,0.5,after_translation_x_abs,0.5,0) return after_translation_magnitude#获取每一份sobel区域矩阵的sum值def sum(src): sum = 0 for i in range(0, src.shape[0]): for j in range(0, src.shape[1]): sum += src[i][j] return sum#返回所选模板的参数def get_position_index(region_1, region_2, region_3, region_4): index = array([0,0]) if(sum(region_1) == max(sum(region_1), sum(region_2), sum(region_3), sum(region_4))): if(sum(region_2) == max(sum(region_2), sum(region_3), sum(region_4))): index = array([0,1]) elif(sum(region_3) == max(sum(region_2), sum(region_3), sum(region_4))): index = array([1,0]) else: index = array([1,1]) elif (sum(region_2) == max(sum(region_1), sum(region_2), sum(region_3), sum(region_4))): if(sum(region_1) == max(sum(region_1), sum(region_3), sum(region_4))): index = array([0,0]) if(sum(region_3) == max(sum(region_1), sum(region_3), sum(region_4))): index = array([1,0]) else: index = array([1,1]) elif (sum(region_3) == max(sum(region_1), sum(region_2), sum(region_3), sum(region_4))): if(sum(region_1) == max(sum(region_1), sum(region_2), sum(region_4))): index = array([0,0]) if(sum(region_2) == max(sum(region_1), sum(region_2), sum(region_4))): index = array([0,1]) else: index = array([1,1]) else: if(sum(region_1) == max(sum(region_1), sum(region_2), sum(region_3))): index = array([0,0]) if(sum(region_2) == max(sum(region_1), sum(region_2), sum(region_3))): index = array([0,1]) else: index = array([1,0]) return index#找到图像与模板匹配的位置坐标def findposition(img, position_index): imsrc = ac.imread('D:\\python_opencv\\source_image\\1123\\1\\1.jpg') imtemplate = imsrc[int((imsrc.shape[0]/4) * (2*position_index[0] + 1) - (template_size/2)) : int((imsrc.shape[0]/4) * (2*position_index[0] + 1) + (template_size/2)), int((imsrc.shape[1]/4) * (2*position_index[1] + 1) - (template_size/2)) : int((imsrc.shape[1]/4) * (2*position_index[1] + 1) + (template_size/2))] #第一个参数代表y方向,第二个参数代表x方向 imsrc = img # find the match position #print("imsrc", imsrc) pos = ac.find_template(imsrc, imtemplate,threshold=0.2) #print("pos", pos) center_pos = pos['result'] return center_pos#画图def draw_rectangle(img, pos_1, pos_4, color, line_width): cv2.rectangle(img, pos_1, pos_4, color, line_width) cv2.imshow('objDetect', imsrc) cv2.waitKey(0) cv2.destroyAllWindows()def translate(img, x, y): H = np.float32([[1,0,x],[0,1,y]]) rows,cols = img.shape[:2] res = cv2.warpAffine(img,H,(cols,rows)) #需要图像、变换矩阵、变换后的大小 return resdef add(a,b): # 迭代输出行 result = np.zeros((640,480)) for i in range(len(a)): # 迭代输出列 for j in range(len(a[0])): result[i][j] = a[i][j] + b[i][j] return resultdef typeconvert(a): for i in range(len(a)): # 迭代输出列 for j in range(len(a[0])): a[i][j] = a[i][j] * (256) return adef f(x): return np.float(x)def g(x): return np.int(x)if __name__ == "__main__": img = cv2.imread("D:\\python_opencv\\source_image\\1122\\2\\1.jpg",0) region_1 = getROISobel(img, 0, 0) region_2 = getROISobel(img, 0, 1) region_3 = getROISobel(img, 1, 0) region_4 = getROISobel(img, 1, 1) print(sum(region_1)) print(sum(region_2)) print(sum(region_3)) print(sum(region_4)) position_index = get_position_index(region_1, region_2, region_3, region_4) print(position_index) imsrc_1 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\1.jpg') imsrc_2 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\2.jpg') imsrc_3 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\3.jpg') imsrc_4 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\4.jpg') imsrc_5 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\5.jpg') imsrc_6 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\6.jpg') imsrc_7 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\7.jpg') imsrc_8 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\8.jpg') imsrc_9 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\9.jpg') imsrc_10 = cv2.imread('D:\\python_opencv\\source_image\\1123\\1\\10.jpg') position_1 = findposition(imsrc_1, position_index) position_2 = findposition(imsrc_2, position_index) position_3 = findposition(imsrc_3, position_index) position_4 = findposition(imsrc_4, position_index) position_5 = findposition(imsrc_5, position_index) position_6 = findposition(imsrc_6, position_index) position_7 = findposition(imsrc_7, position_index) position_8 = findposition(imsrc_8, position_index) position_9 = findposition(imsrc_9, position_index) position_10 = findposition(imsrc_10, position_index) print("position_1[0]", position_1[0]) print("position_1[1]", position_1[1]) print("position_2[0]", position_2[0]) print("position_2[1]", position_2[1]) print(position_1[0] - position_2[0]) print(position_1[1] - position_2[1]) print(position_1[0] - position_3[0]) print(position_1[1] - position_3[1]) print(position_1[0] - position_4[0]) print(position_1[1] - position_4[1]) print(position_1[0] - position_5[0]) print(position_1[1] - position_5[1]) print(position_1[0] - position_6[0]) print(position_1[1] - position_6[1]) print(position_1[0] - position_7[0]) print(position_1[1] - position_7[1]) print(position_1[0] - position_8[0]) print(position_1[1] - position_8[1]) print(position_1[0] - position_9[0]) print(position_1[1] - position_9[1]) print(position_1[0] - position_10[0]) print(position_1[1] - position_10[1]) imsrc_1 = translate(imsrc_1, position_1[0] - position_1[0], position_1[1] - position_1[1]) imsrc_2 = translate(imsrc_2, position_1[0] - position_2[0], position_1[1] - position_2[1]) imsrc_3 = translate(imsrc_3, position_1[0] - position_3[0], position_1[1] - position_3[1]) imsrc_4 = translate(imsrc_4, position_1[0] - position_4[0], position_1[1] - position_4[1]) imsrc_5 = translate(imsrc_5, position_1[0] - position_5[0], position_1[1] - position_5[1]) imsrc_6 = translate(imsrc_6, position_1[0] - position_6[0], position_1[1] - position_6[1]) imsrc_7 = translate(imsrc_7, position_1[0] - position_7[0], position_1[1] - position_7[1]) imsrc_8 = translate(imsrc_8, position_1[0] - position_8[0], position_1[1] - position_8[1]) imsrc_9 = translate(imsrc_9, position_1[0] - position_9[0], position_1[1] - position_9[1]) imsrc_10 = translate(imsrc_10, position_1[0] - position_10[0], position_1[1] - position_10[1]) ''' imsrc_8 = cv2.imread('D:\\python_opencv\\source_image\\image_match\\8.jpg') imsrc_9 = cv2.imread('D:\\python_opencv\\source_image\\image_match\\9.jpg') imsrc_10 = cv2.imread('D:\\python_opencv\\source_image\\image_match\\10.jpg') ''' #imsrc_sum = add(imsrc_1, imsrc_2, imsrc_3, imsrc_4, imsrc_5, imsrc_6, imsrc_7) print(imsrc_1.shape) f2 = np.vectorize(f)#让函数矩阵化,解决只能一对一强制性变换这一要求 imsrc_1 = f2(imsrc_1) imsrc_2 = f2(imsrc_2) #imsrc_sum = imsrc_1 + imsrc_2 + imsrc_3 + imsrc_4 + imsrc_5 + imsrc_6 + imsrc_7 #imsrc_average = imsrc_sum/7 imsrc_sum = imsrc_1 + imsrc_2 + imsrc_3 + imsrc_9 imsrc_average = imsrc_sum/4 #imsrc_sum = add(imsrc_1, imsrc_2) g2 = np.vectorize(g)#让函数矩阵化,解决只能一对一强制性变换这一要求 #imsrc_average = g2(imsrc_average) #imsrc_average = np.unit8(imsrc_average) #print(g2(imsrc_average)) cv2.imshow('merge', typeconvert(g2(imsrc_average))) cv2.waitKey(0) cv2.destroyAllWindows()
阅读全文
0 0
- 模板匹配源码
- opencv学习:模板匹配源码解读
- 尺度不变的模板匹配方法(opencv源码)
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- 模板匹配
- java语言程序设计第十章课后题Triangle2D
- 集合最大元问题(递归与分治)——算法设计与分析
- hdu 2036多边形面积
- 内存泄漏
- Prepared for New Acmer
- 模板匹配源码
- 添加元素(数组开头)
- 类中的函数分类与虚函数的原理
- Python中有用的三个工具:dir, type和help
- 图形学相关的论文和源码
- 多线程下载Demo
- h5缓存
- Myeclipse中编码的问题,一个项目存在多种编码,修改指定类型文件的编码
- MySql出现错误:ERROR 1055 (42000) 和 MYSQL的WARNINGS 和 ERRORS查询细节