当前位置: 首页 > news >正文

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

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

  1. 加载图片并使用OpenCV库将其转换为灰度图像
import cv2img = cv2.imread('screenshot.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  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. 根据匹配位置及模板大小,将匹配区域裁剪出来
    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()

异常问题解决
报错信息如下: 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)
http://www.lryc.cn/news/180829.html

相关文章:

  • Rust 使用Cargo
  • 【k8s】集群搭建篇
  • 10.1select并发服务器以及客户端
  • 几个好用的测试HTTP请求的网站
  • kafka简易搭建(windows环境)
  • 毕业设计选题uniapp+springboot新闻资讯小程序源码 开题 lw 调试
  • Linux系统编程基础:进程控制
  • 选择和操作元素
  • 消息中间件(二)——kafka
  • 量化交易全流程(四)
  • idea 如何在命令行快速打开项目
  • YOLOV8-DET转ONNX和RKNN
  • 数量关系 --- 方程
  • 【C语言 模拟实现strlen函数的三种方法】
  • MySQL数据库与表管理《三国志》为例
  • D. Jellyfish and Mex - DP
  • 奥斯卡·王尔德
  • IDEA常用快捷键大全
  • Java之多线程的综合练习二
  • selenium下载安装 -- 使用谷歌驱动碰到的问题
  • 开放式耳机怎么选择、300之内最好的耳机推荐
  • git密码提交切换SSH提交
  • 数字乡村包括哪些方面?数字乡村应用介绍
  • 弹性资源组件elastic-resource设计(一)-架构
  • C/C++笔试面试真题
  • 【Vue3】兄弟组件传参
  • 【CSS 中 link 和@import 的区别】
  • 笔记二:odoo搜索、筛选和分组
  • Ubuntu Zookeeper开机自启动服务
  • 关于Matlab与Python中日期转时间戳不一致的问题