Python 确定大图中是否包含小图

小图:

大图:

完整代码:

# coding: utf-8
import os, sys
import cv2
import time
import win32api
import win32con
import aircv as ac
from PIL import ImageGrab
from log_module import LogClass

import numpy as np

parent_path = os.path.dirname(os.path.abspath(__file__))
sys.path.append(parent_path)


class CheckHDMirror(LogClass):
    """CheckHDMirror"""

    def __init__(self):
        """__init__"""
        LogClass.__init__(self, logName='CheckHDMirror')
        self.setTimedRotatingFileHandler(fileName='CheckHDMirror')
        self.img_path = parent_path + "\\img\\"  # 截图路径
        self.scale = 1
        self.result = False  # 结果

    def search_point(self, img, template, template_size):
        img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        template_ = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
        result = cv2.matchTemplate(img_gray, template_, cv2.TM_CCOEFF_NORMED)
        threshold = 0.9
        loc = np.where(result >= threshold)  # 相似度大于90%
        point = ()
        for pt in zip(*loc[::-1]):
            cv2.rectangle(img, pt, (pt[0] + template_size[1], pt[1] + + template_size[0]), (7, 249, 151), 2)
            point = pt
        if point == ():
            return None, None, None
        return img, point[0] + template_size[1] / 2, point[1]

    def get_position(self):
        try:
            # im = ImageGrab.grab()
            # if os.path.exists(self.img_path) is False:
            #     os.makedirs(self.img_path)
            # im.save(self.img_path + "screenshot.png")  # 全屏截图保存

            mirrir_img = self.img_path + "mirrir.png"
            hd_img = self.img_path + "hd.png"
            max_img = self.img_path + "screenshot.png"

            # 方法一:
            # max_img = cv2.imread(max_img)  # 要找的大图
            # max_img = cv2.resize(max_img, (0, 0), fx=self.scale, fy=self.scale)
            #
            # hd_img = cv2.imread(hd_img)  # 图中的小图
            # hd_img = cv2.resize(hd_img, (0, 0), fx=self.scale, fy=self.scale)
            # hd_img_size = hd_img.shape[:2]
            #
            # mirrir_img = cv2.imread(mirrir_img)  # 图中的小图
            # mirrir_img = cv2.resize(mirrir_img, (0, 0), fx=self.scale, fy=self.scale)
            # mirrir_img_size = mirrir_img.shape[:2]
            #
            # hd, x_, y_ = self.search_point(max_img, hd_img, hd_img_size)
            # mirrir, x_, y_ = self.search_point(max_img, mirrir_img, mirrir_img_size)

            # 方法二:
            max_img_pos = ac.imread(max_img)
            hd_img_pos = ac.imread(hd_img)
            m_img_pos = ac.imread(mirrir_img)

            hd = ac.find_template(max_img_pos, hd_img_pos)  # 在大图中找小图
            mirrir = ac.find_template(max_img_pos, m_img_pos)

            if hd and mirrir:
                if float(hd["confidence"]) > 0.9 and float(mirrir["confidence"]) > 0.9:  # 相似度大于90%
                    position = hd["result"]  # 坐标
                    print(position)
                    self.result = True
                else:
                    self.result = False
            else:
                self.result = False
            self.logger.info("Is it the same?: %s" % self.result)
            return self.result
        except Exception as e:
            self.logger.error(e)

    def run(self):
        self.logger.info("begin")
        self.get_position()
        self.logger.info("end")


if __name__ == '__main__':
    z = CheckHDMirror()
    z.run()

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是一门强大的编程语言,其在图像处理领域也拥有出色的表现。要分割图像人物,可以利用Python的图像处理库进行实现。 首先,需要加载图像并进行预处理,例如调整图像大小、转换为灰度图像等。接着,可以使用Python的机器学习或深度学习算法对图像进行分割。其,常用的方法包括基于区域的分割、基于阈值的分割和基于边缘的分割。在这些方法,使用卷积神经网络(CNN)进行分割可以获得更好的分割效果。 在使用CNN进行分割时,可以选择现有的预训练模型,例如VGG16、ResNet等,或者自己训练一个模型。模型训练的数据可以来自于现有的数据集,例如COCO、PASCAL VOC等,也可以自己采集和标注数据。在训练模型时,需要调整模型的参数和超参数,以获得更好的分割效果。 最后,可以将分割结果进行可视化,例如将分割出的人物提取出来并覆盖到原图上,以便后续的应用和分析。 总之,使用Python进行图像分割需要掌握图像处理及机器学习或深度学习的相关知识,同时需要选择合适的算法和模型,对分割结果进行优化和可视化,才能达到好的分割效果。 ### 回答2: Python是一种强大的编程语言,可以通过它来分割图像的人物。图像分割是一种常见的图像处理任务,它的目标是将图像分成不同的区域,每个区域具有相似的特征。 在Python,我们可以使用OpenCV库来实现分割图像的人物。OpenCV是一种用于计算机视觉和图像处理任务的库,并且它可以处理各种格式的图像,包括JPEG、PNG和BMP等格式。 要实现图像人物分割,我们可以使用OpenCV提供的图像分割算法。具体来说,我们可以使用GrabCut算法来分割图像的前景和背景。这个算法可以分离出一个属于人物的前景区域,然后将它与背景分割开来。 我们可以通过以下步骤来实现分割图像的人物: 1. 读取图像文件并加载到Python; 2. 初始化GrabCut算法,并确定所有像素的标签(前景、背景或未知); 3. 使用GrabCut算法对图像进行迭代,直到达到收敛条件; 4. 将分割出的前景区域提取出来,即可得到分割图像的人物区域。 在实际应用,我们还需要根据不同的图像和应用场景来选择适当的参数和算法,以获得最好的分割效果。 总之,Python是一种非常强大的编程语言,可以用来实现各种图像处理任务,包括图像人物分割。有了PythonOpenCV库的支持,我们可以轻松地实现图像处理任务,提高图像分割的准确性和效率。 ### 回答3: Python分割图像人物是一项使用计算机视觉技术实现的任务,其目的是将一张复杂的图像的人物部分从其他部分分离出来。这个任务可以被广泛应用于图像处理、虚拟现实、机器人视觉等领域。 对于此任务,我们可以采用一些现有的算法和工具。其最常用的技术则是基于深度学习的图像分割方法,其原理是通过训练一个卷积神经网络,使其能够识别图像的不同对象,从而能够在新的输入图像自动分割出人物区域。 另一种方法是采用传统的图像处理方法,如腐蚀膨胀法、区域生长法等,这些方法较为简单,但是其对图像质量、光照等因素的要求较高。 此外,为了完成图片分割,我们需要一个Python的图像处理库,比如OpenCVOpenCV是一个先进的计算机视觉库,它提供了很多用于图像分割、处理和分析的函数和工具。 总的来说,Python分割图像人物这个任务并不是一项非常难以完成的工作,只要掌握相关的算法和工具,领域内的专业人员可以轻松地完成这项任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值