这是一个图像,我需要找到狗的嘴巴及其尾巴,并且需要使用图像处理找到狗的尾巴与它的嘴巴之间的距离(注意:不应该考虑整个身体的最小距离或空间距离)。
import cv2
import numpy as np
filename = 'Dog-catches-own-tail_1.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
dst = cv2.dilate(dst,None)
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imwrite('Image.jpg',img)
运行代码段后,我可以在这里找到弯角:
答案 0 :(得分:0)
我已通过以下方式实现了上面评论中讨论的内容;计算是在您提取的二维灰度矩阵上完成的。我为馈入聚类器的矩阵的目标值分配了零和一,在本例中为KMeans,尽管可以根据需要将其替换为其他模型。
import cv2
import numpy as np
filename = 'Dog.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
dst = cv2.dilate(dst,None)
gray[dst>0.01*dst.max()] = 1
gray[dst<=0.01*dst.max()] = 0
from sklearn.cluster import KMeans
km = KMeans(n_clusters=2)
km.fit(gray)
centers = km.cluster_centers_
from sklearn.metrics.pairwise import cosine_distances
print(cosine_distances(centers))
输出为:
[[0. 0.60477114]
[0.60477114 0. ]]
是包含中心的成对余弦距离的矩阵。可以在对.cornerHarris()的调用上进行进一步的调整,实际上,应该检查提取的簇是否至少模糊地对应于狗的尾巴和嘴巴。 此外,可能无法在其他图像上推广此方法。目前还不清楚会发生什么情况,例如,如果狗咬它的尾巴:很可能以与尾巴,嘴巴或两者都不相关的方式识别出簇。对特定图像的代码进行的调整越多,则该模型推广的可能性就越低:因此,这只狗追逐着自己的尾巴。