广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么使用Python+OpenCV实现图像识别替换功能
  • 515
分享到

怎么使用Python+OpenCV实现图像识别替换功能

2023-07-02 18:07:48 515人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本文小编为大家详细介绍“怎么使用python+OpenCV实现图像识别替换功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python+OpenCV实现图像识别替换功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来

本文小编为大家详细介绍“怎么使用python+OpenCV实现图像识别替换功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python+OpenCV实现图像识别替换功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

OpenCV-Python是一个Python库,旨在解决计算机视觉问题。

OpenCV是一个开源的计算机视觉库,1999年由英特尔的Gary Bradski启动。Bradski在访学过程中注意到,在很多优秀大学的实验室中,都有非常完备的内部公开的计算机视觉接口。这些接口从一届学生传到另一届学生,对于刚入门的新人来说,使用这些接口比重复造轮子方便多了。这些接口可以让他们在之前的基础上更有效地开展工作。OpenCV正是基于为计算机视觉提供通用接口这一目标而被策划的。

安装opencv

pip3 install -i https://pypi.doubaNIO.com/simple/ opencv-python

思路:

首先区分三张图片:

base图片代表初始化图片;

template图片代表需要在大图中匹配的图片;

white图片为需要替换的图片。

怎么使用Python+OpenCV实现图像识别替换功能

怎么使用Python+OpenCV实现图像识别替换功能

怎么使用Python+OpenCV实现图像识别替换功能

然后template图片逐像素缩小匹配,设定阈值,匹配度到达阈值的图片,判定为在初始图片中;否则忽略掉。

匹配到最大阈值的地方,返回该区域的位置(x,y)

然后用white图片resize到相应的大小,填补到目标区域。

match函数:

"""检查模板图片中是否包含目标图片"""def make_cv2(photo1, photo2):    global x, y, w, h, num_1,flag    starttime = datetime.datetime.now()    #读取base图片    img_rgb = cv2.imread(f'{photo1}')    #读取template图片    template = cv2.imread(f'{photo2}')    h, w = template.shape[:-1]    print('初始宽高', h, w)    res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)    print('初始最大相似度', res.max())    threshold = res.max()    """,相似度小于0.2的,不予考虑;相似度在[0.2-0.75]之间的,逐渐缩小图片"""    print(threshold)    while threshold >= 0.1 and threshold <= 0.83:        if w >= 20 and h >= 20:            w = w - 1            h = h - 1            template = cv2.resize(                template, (w, h), interpolation=cv2.INTER_CUBIC)            res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)            threshold = res.max()            print('宽度:', w, '高度:', h, '相似度:', threshold)        else:            break    """达到0.75覆盖之前的图片"""    if threshold > 0.8:        loc = np.where(res >= threshold)        x = int(loc[1])        y = int(loc[0])        print('覆盖图片左上角坐标:', x, y)        for pt in zip(*loc[::-1]):            cv2.rectangle(                img_rgb, pt, (pt[0] + w, pt[1] + h), (255, 144, 51), 1)        num_1 += 1        endtime = datetime.datetime.now()        print("耗时:", endtime - starttime)        overlay_transparent(x, y, photo1, photo3)    else:        flag = False

replace函数:

"""将目标图片镶嵌到指定坐标位置"""def overlay_transparent(x, y, photo1, photo3):    #覆盖图片的时候上下移动的像素空间    y += 4    global w, h, num_2    background = cv2.imread(f'{photo1}')    overlay = cv2.imread(f'{photo3}')    """缩放图片大小"""    overlay = cv2.resize(overlay, (w, h), interpolation=cv2.INTER_CUBIC)    background_width = background.shape[1]    background_height = background.shape[0]    if x >= background_width or y >= background_height:        return background    h, w = overlay.shape[0], overlay.shape[1]    if x + w > background_width:        w = background_width - x        overlay = overlay[:, :w]    if y + h > background_height:        h = background_height - y        overlay = overlay[:h]    if overlay.shape[2] < 4:        overlay = np.concatenate([overlay, np.ones((overlay.shape[0], overlay.shape[1], 1), dtype=overlay.dtype) * 255],axis=2,)    overlay_image = overlay[..., :3]    mask = overlay[..., 3:] / 255.0    background[y:y + h,x:x + w] = (1.0 - mask) * background[y:y + h,x:x + w] + mask * overlay_image    # path = 'result'    path = ''    cv2.imwrite(os.path.join(path, f'1.png'), background)    num_2 += 1    print('插入成功。')    init()

每次执行需要初始化x,y(图片匹配初始位置参数),w,h(图片缩放初始宽高)

x = 0y = 0w = 0h = 0flag = Truethreshold = 0template = ''num_1 = 0num_2 = 0photo3 = ''"""参数初始化"""def init():    global x, y, w, h, threshold, template,flag    x = 0    y = 0    w = 0    h = 0    threshold = 0    template = ''

完整代码

import cv2import datetimeimport osimport numpy as npx = 0y = 0w = 0h = 0flag = Truethreshold = 0template = ''num_1 = 0num_2 = 0photo3 = ''"""参数初始化"""def init():    global x, y, w, h, threshold, template,flag    x = 0    y = 0    w = 0    h = 0    threshold = 0    template = ''"""检查模板图片中是否包含目标图片"""def make_cv2(photo1, photo2):    global x, y, w, h, num_1,flag    starttime = datetime.datetime.now()    img_rgb = cv2.imread(f'{photo1}')    template = cv2.imread(f'{photo2}')    h, w = template.shape[:-1]    print('初始宽高', h, w)    res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)    print('初始最大相似度', res.max())    threshold = res.max()    """,相似度小于0.2的,不予考虑;相似度在[0.2-0.75]之间的,逐渐缩小图片"""    print(threshold)    while threshold >= 0.1 and threshold <= 0.83:        if w >= 20 and h >= 20:            w = w - 1            h = h - 1            template = cv2.resize(                template, (w, h), interpolation=cv2.INTER_CUBIC)            res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)            threshold = res.max()            print('宽度:', w, '高度:', h, '相似度:', threshold)        else:            break    """达到0.75覆盖之前的图片"""    if threshold > 0.8:        loc = np.where(res >= threshold)        x = int(loc[1])        y = int(loc[0])        print('覆盖图片左上角坐标:', x, y)        for pt in zip(*loc[::-1]):            cv2.rectangle(                img_rgb, pt, (pt[0] + w, pt[1] + h), (255, 144, 51), 1)        num_1 += 1        endtime = datetime.datetime.now()        print("耗时:", endtime - starttime)        overlay_transparent(x, y, photo1, photo3)    else:        flag = False"""将目标图片镶嵌到指定坐标位置"""def overlay_transparent(x, y, photo1, photo3):    y += 0    global w, h, num_2    background = cv2.imread(f'{photo1}')    overlay = cv2.imread(f'{photo3}')    """缩放图片大小"""    overlay = cv2.resize(overlay, (w, h), interpolation=cv2.INTER_CUBIC)    background_width = background.shape[1]    background_height = background.shape[0]    if x >= background_width or y >= background_height:        return background    h, w = overlay.shape[0], overlay.shape[1]    if x + w > background_width:        w = background_width - x        overlay = overlay[:, :w]    if y + h > background_height:        h = background_height - y        overlay = overlay[:h]    if overlay.shape[2] < 4:        overlay = np.concatenate([overlay, np.ones((overlay.shape[0], overlay.shape[1], 1), dtype=overlay.dtype) * 255],axis=2,)    overlay_image = overlay[..., :3]    mask = overlay[..., 3:] / 255.0    background[y:y + h,x:x + w] = (1.0 - mask) * background[y:y + h,x:x + w] + mask * overlay_image    # path = 'result'    path = ''    cv2.imwrite(os.path.join(path, f'1.png'), background)    num_2 += 1    print('插入成功。')    init()if __name__ == "__main__":    photo1 = "1.png"    photo2 = "3.png"    photo3 = "white.png"    while flag == True:        make_cv2(photo1, photo2)        overlay_transparent(x, y, photo1, photo3)

执行结果:

怎么使用Python+OpenCV实现图像识别替换功能

读到这里,这篇“怎么使用Python+OpenCV实现图像识别替换功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网Python频道。

--结束END--

本文标题: 怎么使用Python+OpenCV实现图像识别替换功能

本文链接: https://www.lsjlt.com/news/343609.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用Python+OpenCV实现图像识别替换功能
    本文小编为大家详细介绍“怎么使用Python+OpenCV实现图像识别替换功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python+OpenCV实现图像识别替换功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-02
  • Python+OpenCV实现图像识别替换功能详解
    OpenCV-Python是一个Python库,旨在解决计算机视觉问题。 OpenCV是一个开源的计算机视觉库,1999年由英特尔的Gary Bradski启动。Bradski在访学...
    99+
    2022-11-11
  • c++图像识别功能怎么实现
    要实现C++图像识别功能,你可以使用图像处理库和机器学习库来完成。以下是一种可能的实现方法: 安装和配置OpenCV库:Open...
    99+
    2023-10-24
    c++
  • C++ OpenCV怎么实现形状识别功能
    本篇内容主要讲解“C++ OpenCV怎么实现形状识别功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ OpenCV怎么实现形状识别功能”吧!一、图像预处理原图如图所...
    99+
    2023-07-02
  • OpenCV怎么实现视频绿幕背景替换功能
    本篇内容介绍了“OpenCV怎么实现视频绿幕背景替换功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、概述案例:使用OpenCV实现视频...
    99+
    2023-07-05
  • 如何使用Python实现图像识别?
            在当今的数字化时代,图像识别技术已经成为了人工智能领域中的一个热门话题。图像识别技术可以将数字图像转换为可供计算机程序理解的数据,并对图像内容进行分析和处理。Python是目前最受欢迎的编程语言之一,也是图像识别技术中最常用...
    99+
    2023-09-01
    python
  • 如何使用OpenCV-Python实现识别答题卡判卷功能
    这篇文章主要为大家展示了“如何使用OpenCV-Python实现识别答题卡判卷功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用OpenCV-Python实现识别答题卡判卷功能”这篇文章...
    99+
    2023-06-22
  • 怎么利用PyTorch实现图像识别
    这篇文章主要介绍“怎么利用PyTorch实现图像识别”,在日常操作中,相信很多人在怎么利用PyTorch实现图像识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么利用PyTorch实现图像识别”的疑惑有所...
    99+
    2023-07-05
  • Python怎么利用opencv实现手势识别
    这篇文章主要讲解了“Python怎么利用opencv实现手势识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么利用opencv实现手势识别”吧!获取视频(摄像头)这部分没啥说...
    99+
    2023-06-30
  • 怎么在C++中使用opencv实现一个车道线识别功能
    本篇文章为大家展示了怎么在C++中使用opencv实现一个车道线识别功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。(一)目前国内外广泛使用的车道线检测方法主要分为两大类:(1) 基于道路特征的车...
    99+
    2023-06-06
  • Android中怎么实现图片识别功能
    本篇文章为大家展示了Android中怎么实现图片识别功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、界面我采用了一个SurfaceView用来显示摄像头的预览画面,重写了一个SurfaceVi...
    99+
    2023-05-30
    android
  • OpenCV-Python怎么使用分水岭算法实现图像分割与提取功能
    小编给大家分享一下OpenCV-Python怎么使用分水岭算法实现图像分割与提取功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!随着当今世界的发展,计算机视觉技...
    99+
    2023-06-15
  • OpenCV中怎么使用GrabCut实现抠图功能
    这篇文章主要讲解了“OpenCV中怎么使用GrabCut实现抠图功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“OpenCV中怎么使用GrabCut实现抠图功能”吧!1、概述grabCut...
    99+
    2023-07-05
  • 如何使用Python实现图像文字识别OCR
    要使用Python实现图像文字识别OCR,可以使用以下步骤: 安装Tesseract OCR引擎 Tesseract是一种开源OCR引擎,可以处理多种语言和字体。要使用Python进行OCR,需要安装Tesseract OCR引擎。安装...
    99+
    2023-09-09
    python opencv 计算机视觉 Powered by 金山文档
  • 如何使用Python实现识别图像中人物
    小编给大家分享一下如何使用Python实现识别图像中人物,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境部署按照上一篇的安装部署就可以了。代码不废话,直接上代码...
    99+
    2023-06-26
  • 怎么在Python中使用Opencv识别相似的图片
    这篇文章给大家介绍怎么在Python中使用Opencv识别相似的图片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均...
    99+
    2023-06-14
  • python中怎么通过10行代码完成图像识别功能
    这篇文章将为大家详细讲解有关python中怎么通过10行代码完成图像识别功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ImageAI是一个 python 库,旨在使开发人员能够使用简单的几行代码构建具...
    99+
    2023-06-28
  • 使用Python怎么实现一个图像分类功能
    今天就跟大家聊聊有关使用Python怎么实现一个图像分类功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语...
    99+
    2023-06-14
  • Python怎么使用EasyOCR工具识别图像文本
    本文小编为大家详细介绍“Python怎么使用EasyOCR工具识别图像文本”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python怎么使用EasyOCR工具识别图像文本”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-06
  • 怎么用Python代码实现文字识别功能
    今天小编给大家分享一下怎么用Python代码实现文字识别功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.环境和配置要求...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作