【发布时间】:2018-01-13 21:09:35
【问题描述】:
import numpy as np
import cv2
blank_image = np.zeros((40,40,3), np.uint8)
blank_image.fill(255)
#cv2.imshow('i', blank_image)
#cv2.waitKey(0)
im = cv2.imread('img.png')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[4]
cnts = cv2.drawContours(im,[cnt],0,(255,0,0), -1)
cv2.imshow('i', im)
cv2.waitKey(0)
for a in cnt:
print(a) #this contour is a 3D numpy array
源图片:
我正在使用此代码:
1. 创建一个 40x40 像素的白色画布
2. 使用Opencv函数findContours找到数字(本例中为5)的轮廓。
我想要做的是将这个形状(请,不是边界框或矩形,蓝色形状)复制到画布中。
经过一些研究,我了解到 opencv 图像只是一个 numpy 数组。理论上,这个数组应该在新图像(我的白色画布..)中翻译,然后使用数组中的值重建形状。我说的对吗?
有人知道怎么做吗?在某些情况下,围绕数字创建边界框/矩形会导致不准确。请不要把它作为解决方案。我已经用至少 3-4 种不同的方式完成了这个过程,结果还不够令人满意。
因此,所需的输出将是这样的......
谢谢。
【问题讨论】: