<p>一个可能的解决方案是使用泛光填充来清除白色像素的所有边缘。当你找到你的轮廓后,你会保证他们是在框架内。我曾经用过这个代码来完成这个任务。你知道吗</p>
<p>这可能不是最好的解决办法,但仍然是一个解决办法。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import cv2 as cv
# Image will then be binary, either 0 or 255.
def floodfill_edges(image):
where = np.where(image[:, 0] == 255)
while where[0].size > 0:
x, y = 0, where[0][0]
cv.floodFill(image, None, (x, y), 0)
where = np.where(image[:, 0] == 255)
where = np.where(image[:, -1] == 255)
while where[0].size > 0:
x, y = image.shape[1] - 1, where[0][0]
cv.floodFill(image, None, (x, y), 0)
where = np.where(image[:, -1] == 255)
where = np.where(image[0, :] == 255)
while where[0].size > 0:
x, y = where[0][0], 0
cv.floodFill(image, None, (x, y), 0)
where = np.where(image[0, :] == 255)
where = np.where(image[-1, :] == 255)
while where[0].size > 0:
x, y = where[0][0], image.shape[0] - 1
cv.floodFill(image, None, (x, y), 0)
where = np.where(image[-1, :] == 255)
return image
</code></pre>
<p>我不确定效率,所以你得测试一下。你知道吗</p>