opencv 简单的图像检测,识别,标注,

opencv 简单的图像检测,识别,标注,,第1张

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()

成果图像就是这个了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/715763.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存