opencv对一张(1000000,10000000,3)的图片做模板匹配时,会出现segmention fault错误

所以我设计了一种纵向切割图像的算法,模板过大则不适用

文件夹结构:

里面的png是超级大图

"""-*- coding: utf-8 -*-author: Hao Hu@date   2022/4/8 11:13 PM
"""
import numpy as np
import matplotlib.pyplot as plt
"""本脚本适用于超大图像纵向识别"""
import os
os.environ["OPENCV_IO_MAX_IMAGE_PIXELS"] = pow(2,40).__str__()
import cv2
import os.path as osp
from toml import loaddef get_template(img_path,pattern0_bbox):"""通过pattern_bbox得到位置信息"""image = cv2.imread(img_path)template = image[pattern0_bbox[1]:pattern0_bbox[3],pattern0_bbox[0]:pattern0_bbox[2]]return templatedef get_only_template_area(loc, blackground_mask,img_tmp,template_image,k):"""通过分割后的原图得到 仅包含模板的mask图"""h, w = template_image.shape[:2]for index in range(k+1):for pt in zip(*loc[index][::-1]):bottom_right = (pt[0] + w, pt[1] + h)blackground_mask[pt[1]+12000*index:bottom_right[1]+12000*index,pt[0]:bottom_right[0]] = img_tmp[index][pt[1]:bottom_right[1],pt[0]:bottom_right[0]]return blackground_maskdef template_match(ori_img_path,template1_image,template2_image):ori_img = cv2.imread(ori_img_path)blackground_mask = np.zeros((ori_img.shape[0], ori_img.shape[1], 3), dtype="uint8")k = int(ori_img.shape[0]/15000)img_tmp = {}for index in range(k+1):# 定义一个数组保存图像if index == 0:img_tmp[index] = ori_img[0:15000*(index+1),0:ori_img.shape[1]]if index == k:img_tmp[index] = ori_img[12000*index:ori_img.shape[0],0:ori_img.shape[1]]else:img_tmp[index] = ori_img[12000*index:12000*index+15000,0:ori_img.shape[1]]threshold = 0.85res = {}loc = {}for index in range(k+1):res[index] =cv2.matchTemplate(img_tmp[index], template1_image, cv2.TM_CCOEFF_NORMED)loc[index] = np.where(res[index] >= threshold)res2 = {}loc2 = {}for index in range(k+1):res2[index] =cv2.matchTemplate(img_tmp[index], template2_image, cv2.TM_CCOEFF_NORMED)loc2[index] = np.where(res2[index] >= threshold)template_only_area = get_only_template_area(loc, blackground_mask,img_tmp,template1_image,k)template_only_area = get_only_template_area(loc2,template_only_area,img_tmp,template2_image,k)return template_only_areadef generate_img(template_only_area,pattern_path,folder_path):"""生成想要的图片"""generate_folder_tmp = '/cloud_disk/users/huh/pcb/template_matching/NEW_TASK_4_6/test/'generate_folder_NO_RESIZE = osp.join(folder_path,'/segmap_layers/copper/',osp.basename(pattern_path))if not os.path.exists(generate_folder_NO_RESIZE):os.makedirs(generate_folder_NO_RESIZE)cv2.imwrite(generate_folder_NO_RESIZE,template_only_area)template_only_area =cv2.resize(template_only_area, (int(template_only_area.shape[0] / 60), int(template_only_area.shape[1] / 60)), cv2.INTER_NEAREST)test_path = osp.join(generate_folder_tmp,'test_'+osp.basename(pattern_path))cv2.imwrite(test_path,template_only_area)def read_toml(toml_path):"""读取toml文件中的数据"""with open(toml_path, 'r') as fp:content = load(fp)pattern_box = content['patterns']pattern0_box = pattern_box['pattern0']['bbox']pattern1_box = pattern_box['pattern0']['bbox']return pattern0_box,pattern1_boxdef get_file_path(folder_path):"""得到相关文件的路径"""file_list = os.listdir(folder_path)for file in file_list:if 'png' in file:ori_img_path = osp.join(folder_path,file)if 'toml' in file:toml_path = osp.join(folder_path,file)pattern0_folder_path = osp.join(folder_path+'/patterns/pattern0/copper/')pattern1_folder_path = osp.join(folder_path+'/patterns/pattern0/copper/')pattern0_path = osp.join(pattern0_folder_path,os.listdir(pattern0_folder_path)[0])pattern1_path = osp.join(pattern1_folder_path,os.listdir(pattern1_folder_path)[0])return pattern0_path,pattern1_path,toml_path,ori_img_pathdef main():folder_path = '/cloud_disk/users/huh/pcb/template_matching/NEW_TASK_4_6/P80LI119982A0_L5/'pattern0_path,pattern1_path,toml_path,ori_img_path = get_file_path(folder_path)pattern0_bbox,pattern1_bbox = read_toml(toml_path)template1 = get_template(ori_img_path,pattern0_bbox)template2 = get_template(ori_img_path,pattern1_bbox)template_only_area = template_match(ori_img_path,template1,template2)generate_img(template_only_area,ori_img_path)if __name__ == '__main__':main()

对超级大的图像做模板匹配相关推荐

  1. 用c语言对图像进行模板匹配,[转载]模板匹配的基本概念

    简单而言,模板就是一幅已知的小图像.模板匹配就是在一幅大图像中搜寻目标,已知 该图中有要找的目标,且该目标同模板有相同的尺寸.方向和图像,通过一定的算法可以 在图中找到目标,确定其坐标位置. 以8 位 ...

  2. 【python版CV】图像轮廓模板匹配

    文章目录 1.图像轮廓 1.1 findContours函数: 1.2 获取轮廓信息(可能会报错原因) 1.3 绘制轮廓: 1.4 轮廓特征: 1.5 轮廓近似: 1.6 边界矩形 2.模板匹配 3. ...

  3. matlab 做模板匹配,matlab编程实现模板匹配

    clear all; close all; clc; img=imread('Lena.bmp'); imshow(img); title('原始图像'); img=double(img); mask ...

  4. ​多大分辨率图像做分类更适合?浙大华为国科大等提出Dynamic Resolution Network,降低计算量还提性能!...

    关注公众号,发现CV技术之美 ▊ 写在前面 为了获得更高的精度,深卷积神经网络(CNN)通常具有复杂的设计,具有许多卷积层和可学习的参数.为了减轻在移动设备上部署网络的成本,最近的工作开始研究在预定义 ...

  5. opencv基础--图像模板匹配

    参考:https://blog.csdn.net/ivanhawking/article/details/83182692(该链接附载链接有处理多目标,旋转,缩放等匹配的方法) 1.概述 图像匹配是指 ...

  6. 【OpenCV 4开发详解】图像模板匹配

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  7. OpenCV之imgproc 模块. 图像处理(4)直方图均衡化 直方图计算 直方图对比 反向投影 模板匹配

    直方图均衡化 目标 在这个教程中你将学到: 什么是图像的直方图和为什么图像的直方图很有用 用OpenCV函数 equalizeHist 对图像进行直方图均衡化 原理 图像的直方图是什么? 直方图是图像 ...

  8. OpenCV-Python教程:模板匹配(matchTemplate)

    原文链接:http://www.juzicode.com/opencv-python-matchtemplate 返回Opencv-Python教程 模板匹配可以实现在源图像中查找特征图像,特征图像一 ...

  9. python cv2 matchtemplate_OpenCV-Python系列十:模板匹配

    模板匹配应用的场景非常多,OCR(字符识别),目标检测.定位等等.OpenCV中,你可以使用cv2.matchTemplate()来完成.对于其中的计算原理,可参考如下博客: cv2.matchTem ...

最新文章

  1. glibc方式安装mysql
  2. ajax post 参数说明
  3. ROS系统 创建工作空间与功能包
  4. max的贴图烘焙技术简易流程
  5. faiss(1):简介 安装 与 原理
  6. 汇编写java模块_java – maven汇编插件moduleset源指令不包括任何文件,不符合附带的模块...
  7. mc用云服务器搭建_最全的云服务器架设我的世界私服教程,不看后悔哦!
  8. 一个影响我现在生活状况的故事[转载]
  9. mysql查看索引文件_MySql如何查看索引并实现优化
  10. android 平板键盘布局,7款Android平板输入法横向评测,安卓平板软件HD/THD下载
  11. Charles抓包基本应用
  12. 下载kaggle数据集
  13. 内网即时通讯软件优点大全分享
  14. 图片转换js (img对象,file对象,base64,canvas对象),以及图片压缩方式
  15. 大家都在学Python,你和别人的差距在哪?
  16. 美国队长的工资 python代码-Python入门必学,用Python练习画个美队盾牌
  17. DTOJ 4426. 爱乐之城
  18. 关于互相帮忙投票的微信群、微信刷投票群、微信投票刷票群的详情介绍
  19. 攻防世界之supersqli
  20. linux串口卡驱动下载,ch350l驱动

热门文章

  1. shp地图如何导入奥维地图手机_如何将平面坐标点导入到奥维互动地图
  2. mybatis mysql自增主键_mybatis 自增主键配置
  3. 使用Python进行Grad-CAM ++:深度卷积网络的改进视觉解释
  4. shell实现 ( cp, ls, )
  5. SMPTE ST 2094 and Dynamic Metadata
  6. 倪震华教授版《振动力学》学习(二)
  7. 计算机二级照片要求格式修改(适合零基础)
  8. Linux rm -rf命令慎用!
  9. js-day02-BOM和DOM
  10. php数组转换对象方法