我正在尝试找到将加载的图像转换为在检测到标记的平面上的变换,以便我可以将其转换为垂直于标记平面。 我遇到了将输入放入 cv2.findHomography
的困难。 请帮助更改此函数的输入格式。
这是导致问题的代码:
muffinImg = cv2.imread('muffin.jpg',0)
muffinCoords = np.zeros((4,2), np.float32)
muffheight, muffwidth = muffinImg.shape
muffinCoords[0] = (0,muffwidth)
muffinCoords[1] = (muffwidth,muffheight)
muffinCoords[2] = (0,muffheight)
muffinCoords[3] = (0,0)
found, corners = cv2.findChessboardCorners(frameLeft, (5,4),None)
if (found):
corners2 = cv2.cornerSubPix(grayframeLeft,corners,(11,11),(-1,-1),criteria)
q = [(0,0)]*4
q[0] = corners[0][0]
q[1] = corners[3][0]
q[2] = corners[19][0]
q[3] = corners[16][0]
retvalHomography, mask = cv2.findHomography(q, muffinCoords, cv2.RANSAC)
cv2.warpPerspective(muffinImg, retvalHomography, (400, 500), muffinImg, cv2.INTER_NEAREST, cv2.BORDER_CONSTANT, 0)
我在cv2.findHomography
这行代码出现了错误:srcPoints不是numpy数组,也不是标量
下面是微软视觉对象检查工具的截图:
q:
muffin:
编辑:我有一些关于输入的额外信息,但我不知道它们有什么不同,可能只是我犯了一个新手错误:http://opencv-users.1802565.n2.nabble.com/Anyone-have-a-Python2-example-using-estimateRigidTransform-td7322817.html.
一个快速的解答可能会有所帮助(取决于您要做什么),即cv2.findHomography函数可以从python工作。它返回3x3矩阵而不是2x3矩阵,但如果变换确实是刚体,则会在底部行中发现接近零或一的系数,因此请将它们切掉。
a=np.array([0,0,1,0,0,1,1,1],np.float32).reshape(-1,2) #small square
b=a*2 #scale x2
b+=0.5 #translate across and down
H,matches=cv2.findHomography(a,b,cv2.RANSAC)
findHomography
找到转换矩阵后应用warpPerspective
时我的图像没有受到影响感到困惑。 - Michael Lorenzo