如何在扭曲的图像中找到特定点?
在矩形上,给出了3个圆,其坐标可通过函数HoughCircles with OpenCV找到。这是通过以下代码实现的,这些代码工作正常:
import cv2 as cv
import numpy as np
fig1 = cv.imread('shapes.jpg', cv.IMREAD_COLOR)
fig = cv.cvtColor(fig1, cv.COLOR_BGR2GRAY)
fig = cv.medianBlur(fig, 5)
rows = fig.shape[0]
circles = cv.HoughCircles(fig, cv.HOUGH_GRADIENT, 1, rows / 8,
param1=100, param2=30,
minRadius=1, maxRadius=40)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv.circle(fig1, (i[0], i[1]), i[2], (255, 0, 255), 3)
if circles is None:
print('No circle found!')
cv.imshow("detected circles", fig1)
cv.waitKey(0)
# previously measured distances
ABold=5 # cm
BCold=5 # cm
e=1 # cm
f=1 # cm
x0=float(circles[0,0,0])
y0=float(circles[0,0,1])
x1=float(circles[0,1,0])
y1=float(circles[0,1,1])
x2=float(circles[0,2,0])
y2=float(circles[0,2,1])
# calculate all distances
A=np.sqrt(((x0-x1)**2)+((y0-y1)**2))
B=np.sqrt(((x1-x2)**2)+((y1-y2)**2))
C=np.sqrt(((x2-x0)**2)+((y2-y0)**2))
# determining the hypotenuse
if A>B and A>C:
xA=x2
yA=y2
xC=x1
yC=y1
xB=x0
yB=y0
AB=C
BC=B
elif B>A and B>C:
xB=x0
yB=y0
xA=x1
yA=y1
xC=x2
yC=y2
AB=A
BC=C
else:
xC=x1
yC=y1
xB=x2
yB=y2
xA=x1
yA=y1
AB=A
BC=B
# new position of x-symbol
xX=(xA+e*(AB/ABold))
yX=(yA+f*(BC/BCold))
from matplotlib import pyplot as plt
plt.plot(xA,yA, marker="o", markersize=20, markerfacecolor="green", label="A")
plt.plot(xB,yB, marker="o", markersize=20, markerfacecolor="red", label="B")
plt.plot(xC,yC, marker="o", markersize=20, markerfacecolor="blue", label="C")
plt.plot(xX,yX, marker="x", markersize=20, markerfacecolor="black")
plt.legend()
plt.xlim([0,1200])
plt.ylim([0,1200])
plt.grid()
plt.show()
抱歉,代码不完美。希望你能看穿那里。我只是很快地对它进行了编程,看看哪里会出现问题。
在这些图片中,您可以看到拍摄的图像和使用代码生成的结果:
Picture of Points on Plane to recognize
Result Picture
所有点和标记的距离都是已知的。然而,在拍摄的图像上,它们由于记录而失真。如何确定标记在失真图像上的位置?问题是:圆圈没有区别,而是以随机顺序检测到的。因此,仅仅从改变的距离来确定新的坐标是不可能的,因为我们不知道从哪个点必须获得新的距离。
有什么想法吗?