处理模版图片

简介: 处理模版图片
import cv2
import numpy as np

# 一、模版处理
img = cv2.imread('./card/template.png')
# 原图灰度化
ref = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 二值化处理
_, ref = cv2.threshold(ref,10,255,cv2.THRESH_BINARY_INV)

# 计算轮廓 (第二个参数层级不需要)
ref_contours,_ = cv2.findContours(ref.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
# 画出轮廓
cv2.drawContours(img,ref_contours,-1,(0,0,255),2)
# 对轮廓进行排序,按照数字大小进行排序,方便后面使用
# 排序思路:根据每个数字的最大外接矩形的x轴坐标进行排序
# 计算每个轮廓的外接矩形
bounding_boxes = [cv2.boundingRect(c) for c in ref_contours]
# print(bounding_boxes)
# print(sorted(bounding_boxes,key=lambda b: b[0]))
(ref_contours,bounding_boxes) = zip(*sorted(zip(ref_contours,bounding_boxes),key=lambda b: b[1][0]))
print(len(ref_contours))
digits = {
   }
for (i, c) in enumerate(ref_contours):
    # 重新计算外接矩形
    (x,y,w,h)= cv2.boundingRect(c)
    # region of interest 感兴趣的区域
    # 取出每个数字 (从二值图切片)
    roi = ref[y:y+h,x:x+w]
    # resize成合适的大小
    roi = cv2.resize(roi,(57,88))
    digits[i] = roi

print(digits)

# 二、信用卡处理
image = cv2.imread('./card/card-1.png')
# 为了保证原图不拉伸,需要计算出原图的长宽比
h,w = image.shape[:2]
width = 300
r = width / w
cv2.resize(image,(300,int(h*r)))

cv2.imshow('origin',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
目录
相关文章
|
8月前
|
C++
c++模版
c++模版
|
编译器 C++
【C++】模版(一)
泛型编程、模版(一): 1.泛型编程:
43 0
|
Dubbo Java 应用服务中间件
DocView 现在支持自定义 Markdown 模版了!
有小伙伴反馈说希望可以自定义 Markdown 模版,这样就可以导出自己想要的样式了!这个功能可以有,毕竟大家不可能都生成一模一样的文档。现在来一起看看如何实现自定义模版吧!
117 0
|
缓存 Java Linux
网页截图和svg模版动态生成图片Java实现(3)
网页截图和svg模版动态生成图片Java实现(3)
233 0
网页截图和svg模版动态生成图片Java实现(3)
|
移动开发 Java Linux
网页截图和svg模版动态生成图片Java实现(2)
网页截图和svg模版动态生成图片Java实现(2)
432 0
网页截图和svg模版动态生成图片Java实现(2)
|
移动开发 Java 应用服务中间件
网页截图和svg模版动态生成图片Java实现(1)
网页截图和svg模版动态生成图片Java实现(1)
514 0
网页截图和svg模版动态生成图片Java实现(1)
|
C++
C++模版从精通到精神分裂
这是一个教科书般经典的例子。介绍C++的继承和多态。 这里唯一需要重点强调的是:对函数LetAnimalTalk和vector va 来说,我们可以想象他们是客户。[face=黑体]通过继承把变化封装到基类的后面,这样使用基类接口的客户就不需要改动![/face]对客户来说,无论基类后面怎么变化,你都影响不到我。
6764 0
|
测试技术
故障记录模版
简单故障记录模版
1275 0

热门文章

最新文章

相关实验场景

更多