2022/4/19
刚刚做了个升级版,就是第二种读取文件的方式,另外分函数写了
链接:
python opencv 简单图像识别,标注 [升级版]_死非死的博客-CSDN博客
____________________
第一步 导入库第二步 读取图像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()
成果图像就是这个了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)