Zac*_*ack 10 python opencv image-processing computer-vision
我试图在另一个中找到一个图像.
im = cv.LoadImage('1.png', cv.CV_LOAD_IMAGE_UNCHANGED)
tmp = cv.LoadImage('e1.png', cv.CV_LOAD_IMAGE_UNCHANGED)
w,h = cv.GetSize(im)
W,H = cv.GetSize(tmp)
width = w-W+1
height = h-H+1
result = cv.CreateImage((width, height), 32, 1)
cv.MatchTemplate(im, tmp, result, cv.CV_TM_SQDIFF)
print result
Run Code Online (Sandbox Code Playgroud)
当我运行它时,一切都执行得很好,没有错误被抛出.但我不确定从这里做什么.该文件称result商店"比较结果图".我试过打印它,但它给了我宽度,高度和步数.
如何使用此信息查找一个图像是否位于另一个图像中/它所在的位置?
sie*_*hie 11
MatchTemplate返回相似性图而不是位置.然后,您可以使用此地图查找位置.
如果你只是寻找一个匹配,你可以做这样的事情来获得一个位置:
minVal,maxVal,minLoc,maxLoc = cv.MinMaxLoc(result)
Run Code Online (Sandbox Code Playgroud)
然后minLoc是最佳匹配的位置,并minVal描述模板的拟合程度.您需要提出一个阈值minVal来确定您是否认为此结果是匹配的.
如果您要为每个图像寻找多个匹配项,则需要使用非最大抑制等算法.
这可能适合你!:)
def FindSubImage(im1, im2):
needle = cv2.imread(im1)
haystack = cv2.imread(im2)
result = cv2.matchTemplate(needle,haystack,cv2.TM_CCOEFF_NORMED)
y,x = np.unravel_index(result.argmax(), result.shape)
return x,y
Run Code Online (Sandbox Code Playgroud)
CCOEFF_NORMED只是众多比较方法中的一种.有关
完整列表,请参阅:http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html.
不确定这是不是最好的方法,但速度很快,对我来说效果很好!:)
| 归档时间: |
|
| 查看次数: |
18207 次 |
| 最近记录: |