首页 > 其他分享 >OpenCv单模版多目标匹配

OpenCv单模版多目标匹配

时间:2023-04-12 23:46:06浏览次数:32  
标签:匹配 img 模版 cv2 lk OpenCv result local1

OpenCv单模版多目标匹配

单模版匹配出现的问题

一、

关于单模版匹配,我一开始用的是光线较暗的图,结果根据模版匹配到的位置并不正确。

我后来想用阈值把图形的特征提取出来,在把模版的特征和原图的特征进行比较,如下:

import cv2
img = cv2.imread('/Users/duanhao/Desktop/photo/liukun.jpg')
lk = cv2.imread('/Users/duanhao/Desktop/photo/lk_all.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度
lk_gray = cv2.cvtColor(lk, cv2.COLOR_BGR2GRAY)
new_img = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 3)
new_temple = cv2.adaptiveThreshold(lk_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 3)
# # cv2.imshow('1', new_img)
# # cv2.imshow('2', new_temple)
height, weight, c = lk.shape
result = cv2.matchTemplate(img, lk , cv2.TM_SQDIFF_NORMED) # 标准平均差匹配
minValue, maxValue, minLocal, maxLocal = cv2.minMaxLoc(result)
local1 = minLocal
local2 = (local1[0] + weight, local1[1] + height)
cv2.rectangle(img, local1, local2, (0, 0, 255), 2)
cv2.imshow('data', img)
cv2.waitKey()
cv2.destroyAllWindows()

可是效果依旧不行,还不如原来不调整的图像,这算是我走过的第一条弯路。

二、

cv2里面有一个参数minMaxLoc函数可以提取出匹配样本result的最小值、最大值、最小值的坐标、最大值的坐标。这里坐标(x, y),x对应的是数组的column列,y对应的是数组的rows行,也就是(columns, rows),而cv2里的shape返回的是(rows, columns,channel),不要弄错了。所以在绘制边框的时候是:

height, weight, c = temple.shape
minValue, maxValue, minLocal, maxLocal = cv2.minMaxLoc(result)
local1 = minLocal
local2 = (local1[0] + weight, local1[1] + height)

三、

第一次我需要匹配的图像和模型光线太暗了,所以我在网上找了一个清晰且光线好的图像进行匹配。代码如下:

import cv2
img = cv2.imread('/Users/duanhao/Desktop/photo/MatchDemo/beauty.png')
lk = cv2.imread('/Users/duanhao/Desktop/photo/MatchDemo/number1.png')
height, weight, c = lk.shape
result = cv2.matchTemplate(img, lk , cv2.TM_SQDIFF_NORMED) # 标准平均差匹配
minValue, maxValue, minLocal, maxLocal = cv2.minMaxLoc(result)
local1 = minLocal
local2 = (local1[0] + weight, local1[1] + height)
cv2.rectangle(img, local1, local2, (0, 0, 255), 2)
cv2.imshow('result', img)
cv2.waitKey()
cv2.destroyAllWindows()

一开始我选取的temple样图尺寸太小了,所以匹配到的内容也是不准确的。

后来我把temple样图的尺寸取大一点,就可以完美的匹配了!

绿色框是小样图匹配的结果,红色框是大样图匹配的结果,而我的样图正好和红色框的内容一致,算是匹配完美!所以以后需要匹配的样图尽量选尺寸大一点,特征明显一点的,这样方便匹配计算。

单模版多目标匹配

如果一张图片上,有很多相同特征的图片,如何去匹配多个目标,或者通过调节参数,找到唯一个符合要求的图片,把那些特征相同而不完全一致的图片筛除掉。

import cv2
img = cv2.imread('/Users/duanhao/Desktop/photo/MatchDemo/map.jpg')
temple = cv2.imread('/Users/duanhao/Desktop/photo/MatchDemo/flag.png')
height, weight, c = temple.shape
cnt = 0
result = cv2.matchTemplate(img, temple, cv2.TM_CCORR_NORMED)
for y in range(len(result)):
    for x in range(len(result[y])):
        if result[y][x] > 0.952:
            cv2.rectangle(img, (x, y), (x + weight, y + height), (0, 0, 255, 2))
cv2.imshow('1', img)
cv2.imshow('2', temple)
cv2.waitKey()
cv2.destroyAllWindows()

需要注意的是x代表水平坐标,y代表垂直坐标。

通过调参数,框选出来的内容正是我截取做样图的部分。如果把参数再调小一点那其他标识也会被识别出来,所以多目标匹配相对灵活一点。

标签:匹配,img,模版,cv2,lk,OpenCv,result,local1
From: https://www.cnblogs.com/itduan/p/17311885.html

相关文章

  • [OpenCV] VS 2022 中的配置
    1、下载windows版本的opencv(默认vs已经下载)下载链接: ReleasesArchive-OpenCV 2.创建一个桌面工程随后打开【视图】-【属性管理器】找到下图   如果没有这个选项,下载链接: MSBuild.zip_免费高速下载|百度网盘-分享无限制(baidu.com) 密码:9527,存放到C:\U......
  • Frontiers of computer Science Journal 模版踩坑经历
    官方模版提供网址如下:https://journal.hep.com.cn/fcs/EN/column/column11258.shtml编译的时候出现了文字超出页面的问题。这个问题在网上也有讨论。https://tex.stackexchange.com/questions/609199/how-to-set-bottom-padding-of-the-frontiers-of-computer-science-jour......
  • 正则对税号的匹配逻辑
    税号一般由15或18位数字组成,其中:-15位税号:前6位是所属地区(通常是行政区划代码前6位)、中间6位是组织机构代码、最后3位是登记管理部门代码。-18位税号:前2位是登记管理部门代码、中间6位是组织机构代码、最后10位是由国家税务总局统一分配的顺序编码。所以,对于税号的正则匹配逻......
  • Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
    Mat矩阵点乘——A*BOpencv重载了运算符“*”,姑且称之为Mat矩阵“点乘”,其中一个重载声明为:CV_EXPORTSMatExproperator*(constMat&a,constMat&b);点乘说明:1. A*B是以数学运算中矩阵相乘的方式实现的,即Mat矩阵A和B被当做纯粹的矩阵做乘法运算,这就要求A的列数等 ......
  • UVa 489 Hangman Judge (模拟&字符串匹配)
    489-HangmanJudgeTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=430In``HangmanJudge,''youaretowriteaprogramthatjudgesaseriesofH......
  • 2023-04-11 无向图的匹配问题
    无向图的匹配问题之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想1最大匹配和完美匹配二分图回顾二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多二分图内容参考第4章二分图相关最大......
  • python opencv putText
    pythonopencvputText importcv2#Loadimageimg=cv2.imread("image.jpg")#Definetexttodrawtext="Hello,World!"#Definepositiontodrawtextatposition=(50,50)#Definefonttype,scale,color,andthicknessfont......
  • UVA1646 圈图的匹配 Edge Case
      n个点连成一个圆,求没有公共点的边集的个数不考虑第n条边f[n]=f[n-1]+f[n-2]现在考虑第n条边ans=f[n]+f[n-2] f=[0]*10005f[1]=1f[2]=2foriinrange(3,10004):f[i]=f[i-1]+f[i-2]while1:try:n=int(input())print(f[n]+f[n......
  • KMP算法(串的模式匹配算法)(未完待续......)
    KMP算法的实现1.基本原理  在暴力破解算法(BF算法)中,模式串需要一个一个来跟主串进行对比,若有一个不相同,则主串前进一位,继续从头开始进行比较,这样比较的最坏时间复杂度为O(mn),例:‘aaaaaaaaab’和‘aaab’,需要比较到最后一个才能成功,效率太过低下。  KMP算法的原理是,找到模式串......
  • P6216 回文匹配
    回文匹配/*这里sum表示一维前缀和sum(r-m+1)-sum(l-1)sum(r-m+1-i)-sum(l-1+i)所以应该是使用二位前缀和来进行处理len/2也就是我半径需要的最小长度有些难模拟,但是就是二维前缀和最后统计答案的地方是真的绕*/#include<bits/stdc++.h>usingnamespacestd;con......