我试着模拟出一个从标记中突出的图像。这是到目前为止我的代码,它完成了图中所示的功能。本质上,我只想旋转图像,使其看起来垂直于棋盘。在
如您所见,我使用代码来查找标准化方形图像和相应棋盘角点之间的转换矩阵。然后我使用warpPerspective
来获得您看到的图像。我知道我可以使用solvePnP
的旋转向量,通过rodrigues()
得到一个旋转矩阵,但我不知道下一步是什么
def transformTheSurface(inputFrame):
ret, frameLeft = capleft.read()
capGray = cv2.cvtColor(frameLeft,cv2.COLOR_BGR2GRAY)
found, corners = cv2.findChessboardCorners(capGray, (5,4), None, cv2.CALIB_CB_NORMALIZE_IMAGE + cv2.CALIB_CB_ADAPTIVE_THRESH ) #,None,cv2.CALIB_CB_FAST_CHECK)
if (found):
npGameFrame = pygame.surfarray.array3d(inputFrame)
inputFrameGray = cv2.cvtColor(npGameFrame,cv2.COLOR_BGR2GRAY)
cv2.drawChessboardCorners(frameLeft, (5,4), corners, found)
q = corners[[0, 4, 15, 19]]
ret, rvecs, tvecs = cv2.solvePnP(objp, corners, mtx, dist)
ptMatrix = cv2.getPerspectiveTransform( muffinCoords, q)
npGameFrame = cv2.flip(npGameFrame, 0)
ptMatrixWithXRot = ptMatrix * rodRotMat[0]
#inputFrameConv = cv2.cvtColor(npGameFrame,cv2.COLOR_BGRA2GRAY)
transMuffin = cv2.warpPerspective(npGameFrame, ptMatrix, (640, 480)) #, muffinImg, cv2.INTER_NEAREST, cv2.BORDER_CONSTANT, 0)
我希望在我自己的矩阵3中创建更多的希望矩阵。我用了following reference 。这是我的代码:
^{pr2}$#this is new to my code, creating what I interpret as Rx*Ry*Rz
ret, rvecCalc, tvecs = cv2.solvePnP(objp, corners, loadedCalibFileMTX, dist)
rodRotMat = cv2.Rodrigues(rvecCalc)
R[:3,:3] = rodRotMat[0]
#then I create T
T[0,3] = tvecs[0]
T[1,3] = tvecs[1]
T[2,3] = tvecs[2]
# CREATING CUSTOM TRANSFORM MATRIX
# A1 -> 2d to 3d projection matrix
# R-> rotation matrix as calculated by solve PnP, or Rx * Ry * Rz
# T -> converted translation matrix, reference from site, vectors pulled from tvecs of solvPnP
# mtx -> 3d to 2d matrix
# customTransformMat = mtx * (T * (R * A1)) {this is intended calculation of following}
first = np.dot(R, A1)
second = np.dot(T, first)
finalCalc = np.dot(mtx, second)
finalNorm = finalCalc/(finalCalc[2,2]) # to make sure that the [2,2] element is 1
transMuffin = cv2.warpPerspective(npGameFrame, finalNorm, (640, 480), None, cv2.INTER_NEAREST, cv2.BORDER_CONSTANT, 0)
#transMuffin is returned as undefined here, any help?
# using the cv2.getPerspectiveTransform method to find what you can find pictured at the top
ptMatrix = cv2.getPerspectiveTransform( muffinCoords, q)
我终于找到了正确的方法。您可以在此处找到代码https://github.com/mikezucc/augmented-reality-fighter-pygame
通知:
几乎所有的游戏代码都是由Leiftheiden编写的,并且是在.py文件中指定的许可下编写的。与计算机视觉相关的代码在状态.py. 我用这个游戏只是为了向其他人展示它是可以做到的,因为其他人希望从简单的计算机视觉开始。在
每次调用一个新的曲面(简单地说是PyGame for frame)在主窗口上显示时,我的代码都会打开一个线程。我在这一点上启动一个线程,并执行一个简单的计算机视觉功能,该函数执行以下操作:
变量:
+
from3dTransMatrix
->;投影三维结构到二维点的点。这些是你看到的红点+
q
->;这是我们确定姿势的参照平面+
ptMatrix
->;最后的转换,将游戏框架转换为适合投影框架查看最上面文件夹中的屏幕;]
享受吧!在
相关问题 更多 >
编程相关推荐