第一步 导入库
import cv2 as cv
import matplotlib.pyplot as plt
import os
第二步 读取图像
要读取的就是这几张图像了
下面两种选一个,第一个直接用,第二个有列表索引需要改,懒得改
第一种: 指定文件名
path = r'C:\Users\Administrator\Desktop\python\mypic\peo\\'
?
name=['peo.jpg','man_face.jpg',
? ? ?'man_face2.jpg','man_body1.jpg',
? ? ?'man_body2.jpg']
imgs=[]
num=len(name)
hwl=[] # 存放 高 宽 L 属性
?
plt.figure(figsize=(10,10)) # 创建一个指定大小的画布
for i in range(num):
? ?# 导入图片
? ?imgs.append(cv.imread(path+name[i]))
? ?
? ?# 颜色转置 bgr 转换 rgb
? ?b,g,r = cv.split(imgs[i])
? ?imgs[i]= cv.merge([r,g,b])
? ?
? ?# 获取 图像 高 宽 和 一个 L???,不确定,没用到第三个值
? ?hwl.append(imgs[i].shape)
? ?
? ?# 多余程序 展示一下图像
? ?plt.subplot(num,1,i+1)
? ?plt.imshow(imgs[i])
? ?
第二种: 获取文件名
前提: 所有 文件夹中只有 【检测】和【被检测】的 图像
问题:如何在众多文件中确认主图
思路: 指定主图文件名,if else 判断
注意不能直接套用下面的图像检测代码哦,一部分索引是需要修改的
我懒得改了,没写,只提供思路
path=r'图像路径\\'
img_name=os.listdir(path)
imgs=[]
# img_main=input('主题名称(带后缀名)')
img_main= '手动填 '
for name in img_name:
? ?if name==img_main:
? ? ? ?img_main=cv.imread(path+name)
? ?else:
? ? ? ?imgs.append(cv.imread(path+name))
? ? ? ?
? ? ? ?
如果图像命名是具有规律的,会更简单
展示一下,是否成功
for img in imgs:
? ?plt.figure()
? ?plt.imshow(img[:,:,::-1])
第三步 检测对比图像
ress=[] # 存放比对结果
minMaxLoc=[] # 存放 提取的对应坐标
top_left=[] # 存放图片在原图上的 左上角坐标
bottom_right=[] # 存放图片在原图上的右下角坐标
for i in range(1,num):
? ?# 进行检测对比 第三步
? ?ress.append(cv.matchTemplate(imgs[i],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?imgs[0],cv.TM_CCOEFF))
? ?
? ?# 从检测结果中提取 对应坐标 第四步
? ?minMaxLoc.append(cv.minMaxLoc(ress[i-1]))
?
? ?# 注 minMaxLoc 返回的是四个值,这里取第四个 因为使用的是 cv.TM_CCOEFF
? # 是一个坐标是相似位置矩形的 左上角坐标,
? ?top_left.append(minMaxLoc[i-1][3])
? # 设置矩形框右下角点的坐标
? ?bottom_right.append((top_left[i-1][0]+hwl[i][1],
? ? ? ? ? ? ? ? ? ? ? ? top_left[i-1][1]+hwl[i][0]))
? ?
? # 在对应位置绘画矩形 ,画别的形状也行,但矩形经典,简单,形象
? ?cv.rectangle(imgs[0],top_left[i-1],bottom_right[i-1],
? ? ? ? ? ? ? ? (255,255,0),2)
第四步 展现图像
plt.figure(figsize=(10,10))
plt.imshow(imgs[0])
plt.show()
成果图像就是这个了
|