• 实现将一张图片中的目标图片抠出来


    要在python中实现将一张图片中的目标图片裁剪出来,需要用到图像处理及机器学习库,以下是一个常用的基本框架

    1. 加载图片并使用OpenCV库将其转换为灰度图像
    import cv2
    
    img = cv2.imread('screenshot.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    • 1
    • 2
    • 3
    • 4
    1. 准备模板图像,转为灰度图像
      template = cv2.imread('template.jpg', 0)
    2. 使用OpenCV中的函数cv2.matchTemplate()在目标图像中搜索图像,找到匹配的区域并记录坐标位置
    result = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)
    _, max_val, _, max_loc = cv2.minMaxLoc(result)
    
    • 1
    • 2
    1. 根据匹配位置及模板大小,将匹配区域裁剪出来
      w, h = template.shape[::-1] match_area = img[max_loc[1]:max_loc[1]+h, max_loc[0]:max_loc[0]+w]

    示例代码

    import cv2
    img = cv2.imread("source.png")
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    template = cv2.imread("dist.jpg")
    template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
    result = cv2.matchTemplate(gray, template_gray, cv2.TM_CCORR_NORMED)
    _,max_val, _, max_loc = cv2.minMaxLoc(result)
    w, h = template_gray.shape[::-1]
    match_area = img[max_loc[1]:max_loc[1]+h, max_loc[0]:max_loc[0]+w]
    cv2.imshow("match area", match_area)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    异常问题解决
    报错信息如下: cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\templmatch.cpp:1164: error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function ‘cv::matchTemplate’
    这个错误通常是由于匹配模板图像的深度不正确导致的。匹配函数cv2.matchTemplate()的模板图像应该是单通道灰度图像或3通道BGR图像。如果是单通道灰度图像,则深度应为CV_8U,如果是BGR图像,则深度应为CV_8U或CV_32F。

    解决方法是确保你的模板图像是一个单通道灰度图像或3通道BGR图像,并将深度相应地设置为CV_8U或CV_32F。可以使用以下代码转换图像并将其设置为正确的深度(例如,将BGR图像转换为灰度图像):

    import cv2
    
    # Load the image and convert it to grayscale
    img = cv2.imread('image.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # Load the template and convert it to grayscale
    template = cv2.imread('template.jpg')
    template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
    
    # Match the template to the image
    result = cv2.matchTemplate(gray, template_gray, cv2.TM_CCOEFF_NORMED)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    谷粒学苑_第十天
    力扣大厂热门面试算法题 27-29
    电输运性质测试系统
    3d max软件中的缓存垃圾该如何清理?
    高标准农田可视化
    Nodejs内置模块process
    LeetCode 2731. 移动机器人:脑筋急转弯
    非关系型数据库(NoSQL)——redis
    vue基于百度云实现行驶证识别
    nn.Linear & Tensor.masked_fill
  • 原文地址:https://blog.csdn.net/qq_39706141/article/details/133390102