我正在尝试建立一个卡片识别机器。事情就是这些卡片将被放在一个cenario之上。
据说我来寻求帮助,我可以与图像进行比较,一个是空背景(cenario),另一个是相同的cenario,上面有一张卡片。
import numpy as np
from PIL import Image
import cv2
image1 = cv2.imread("gray_bk.png")
image2 = cv2.imread("gray_novo.png")
cv2.imwrite('LutGrey.png',gray_image)
novo = cv2.subtract(image1,image2)
cv2.imwrite(file, novo)
这是我的代码到目前为止,它的问题是,返回是一张带有卡片的黑色图像(OK)但是卡片中的颜色都搞砸了,我怎么执行相同的操作而没有弄乱了颜色?什么是最好的方式来削减"将卡片变成新的(较小的)图像。
答案 0 :(得分:0)
如果您正在使用真实图像,我建议如下:
一种替代方案通常是基于特征检测的更稳健的方法。检查这个是启动器: http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html。在这种情况下,所有可能的候选卡必须事先知道。
如果卡片刚刚叠加在背景图片上,那么可能会起作用:
# read directly to float
image1 = cv2.imread("gray_bk.png").astype(np.float) / 255
image2 = cv2.imread("gray_novo.png").astype(np.float) / 255
# substract and threshold
threshold = 0.1
binary_image = np.abs(np.mean(image2,2) - np.mean(image1,2)) > threshold
# get card area
y,x = np.where(binary_image)
# extract card from the image
card = image2[ y.min():y.max(), x.min():x.max(),:]