我想在“大图像”中定位“小图像”中对象的坐标。如果你有什么想法,请告诉我。我试过feature matching,但成功率很低。
feature matching
的数据
的
型
v1l68za41#
看起来,对于您的情况,您可以简单地旋转小图片N次,并为每个旋转的小图片应用模板匹配。同时对图像进行了中值滤波以降低噪声范例:
import cv2 as cv import numpy as np from matplotlib import pyplot as plt img_small = cv.imread('small.png', cv.IMREAD_COLOR) img_big = cv.imread('big.png', cv.IMREAD_COLOR) img_small = cv.cvtColor(img_small, cv.COLOR_BGR2RGB) img_big = cv.cvtColor(img_big, cv.COLOR_BGR2RGB) img_big = cv.medianBlur(img_big, 3) rows,cols = img_small.shape[:2] img_small_rotated = list() n = 20 for i in range(0,n): M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),360*(i/n),1) img_small_rot = cv.warpAffine(img_small,M,img_small.shape[:2],borderValue = (255,255,255)) img_small_rot = cv.medianBlur(img_small_rot, 3) img_small_rotated.append(img_small_rot) im_show_all_templates = np.concatenate(img_small_rotated, axis=1) plt.imshow(im_show_all_templates) plt.show() max_loc_global = None max_val_global = 0 for i in img_small_rotated: res = cv.matchTemplate(img_big,i,cv.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res) if max_val > max_val_global: max_val_global = max_val max_loc_global = max_loc print(max_val_global, max_loc_global) top_left = max_loc_global bottom_right = (top_left[0] + cols, top_left[1] + rows) cv.rectangle(img_big,top_left, bottom_right, 0, 2) plt.imshow(img_big) plt.show()
字符串结果:
的数据您可以使用类似的技术以其他方式(缩放、过滤、旋转)扩展模板匹配空间,但对于您的应用程序来说,旋转似乎就足够了。
00jrzges2#
如果布局总是相同的,您可以尝试简单地将6个图标中的每个图标的颜色直方图与您正在寻找的图标进行比较。所以你裁剪出图标并计算每个图标的直方图。然后计算SMALL IMAGE和裁剪图标直方图之间的距离并取最小值。这种方法的问题是,您需要能够确定图标的布局,但是如果您能够做到这一点,那么这种解决方案应该可以工作,因为没有太多的遮挡或颜色变化。其优点是直方图是旋转不变的,因此比使用模板匹配的处理更少。还要考虑在比较之前对直方图进行归一化和图像预处理。
SMALL IMAGE
2条答案
按热度按时间v1l68za41#
看起来,对于您的情况,您可以简单地旋转小图片N次,并为每个旋转的小图片应用模板匹配。
同时对图像进行了中值滤波以降低噪声
范例:
字符串
结果:
的数据
您可以使用类似的技术以其他方式(缩放、过滤、旋转)扩展模板匹配空间,但对于您的应用程序来说,旋转似乎就足够了。
00jrzges2#
如果布局总是相同的,您可以尝试简单地将6个图标中的每个图标的颜色直方图与您正在寻找的图标进行比较。所以你裁剪出图标并计算每个图标的直方图。然后计算
SMALL IMAGE
和裁剪图标直方图之间的距离并取最小值。这种方法的问题是,您需要能够确定图标的布局,但是如果您能够做到这一点,那么这种解决方案应该可以工作,因为没有太多的遮挡或颜色变化。其优点是直方图是旋转不变的,因此比使用模板匹配的处理更少。还要考虑在比较之前对直方图进行归一化和图像预处理。