【发布时间】:2019-02-13 02:53:56
【问题描述】:
我正在尝试制作一个程序来解决一个难题。我的尝试适用于我测试的示例拼图。现在我正在尝试为一个真正的谜题制作一个。 这个新拼图的拼图没有正确的形状。
我设法使图像变成黑白,最后变成 1 和 0 的数组,其中 1 表示片,0 表示背景。我想找到一种方法来识别这些碎片的 4 个角、峰和深度的坐标。
我尝试计算 1 附近 0 的数量,以查看边界中的最大曲线。但是形状不够光滑,无法正常工作。
counter = np.zeros((lenX,lenY),dtype=int)
for i in range(lenX):
for j in range(lenY):
if img[i,j]==1:
counter[i,j] = count_white(img,i,j,lenX,lenY)
print(counter)
tpath = os.getcwd()+"/test.jpg"
print(cv2.imwrite(tpath, Image))
print("saved at : ",tpath)
np.savetxt("test.csv", counter, delimiter=",")
def count_white(img,x,y,lenX,lenY):
X = [x-1,x,x+1,x+1,x+1,x,x-1,x-1]
Y = [y-1,y-1,y-1,y,y+1,y+1,y+1,y]
count = 0
for i in range(len(X)):
if X[i] < lenX and Y[i] < lenY:
if img[X[i],Y[i]] == 0:
count=count+1
return count
有什么建议、参考或想法吗?
【问题讨论】:
-
尝试使用角点检测算法。例如,哈里斯算法。这是OpenCV 和scikit-image 的示例。
-
我会读到它。谢谢
-
@constt 这些不适用于我的情况.. 我认为角落不够锋利
-
您标记为红色的角似乎足够锐利,可以被 Harris 算法捕获。玩弄它的参数。找到角后,您可以用多边形近似平铺并从初始图像中减去它。这将显示隆起和凹陷的位置。
-
@constt 到时候我会多尝试一点.. 但我尝试的不是这个。有很多拼图,其中一些有弯曲的角落。我也会尝试驼峰和凹陷的想法,让你知道..谢谢