如何在python中使用cv :: Mat?

时间:2019-05-21 11:55:25

标签: c++ python-3.x numpy opencv

我正在研究瞳孔检测项目。我找到了此链接,该链接可使用此链接中提供的图像渐变方法跟踪眼睛中心。

链接-http://thume.ca/projects/2012/11/04/simple-accurate-eye-center-tracking-in-opencv/

他已经用C ++实现了这个想法,我想将其转换为python代码。一切都会顺利进行,直到我了解到这个void createCornerKernel()函数为止。

cv::Mat *leftCornerKernel;
cv::Mat *rightCornerKernel;

// not constant because stupid opencv type signatures
float kEyeCornerKernel[4][6] = {
  {-1,-1,-1, 1, 1, 1},
  {-1,-1,-1,-1, 1, 1},
  {-1,-1,-1,-1, 0, 3},
  { 1, 1, 1, 1, 1, 1},
};

void createCornerKernels() {
  rightCornerKernel = new cv::Mat(4,6,CV_32F,kEyeCornerKernel);
  leftCornerKernel = new cv::Mat(4,6,CV_32F);
  // flip horizontally
  cv::flip(*rightCornerKernel, *leftCornerKernel, 1);
}

我将如何在python中转换此cv :: mat(4,6,CV_32F,kEyeCornerKernel)?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

rightCornerKernel = np.array([[-1, -1, -1, 1, 1, 1],
                              [-1, -1, -1, -1, 1, 1],
                              [-1, -1, -1, -1, 0, 3],
                              [1, 1, 1, 1, 1, 1]])

答案 1 :(得分:0)

为了找到解决方案,我一直在为此做更多的工作。正如@stormzhou所建议的那样,我终于能够解决问题。

回答我自己的问题,python中的void createCornerkernels()函数将是

def createCornerkernels():
    leftCornerkernel = None

    rightCornerKernel = np.array([[-1, -1, -1, 1, 1, 1],
                                  [-1, -1, -1, -1, 1, 1],
                                  [-1, -1, -1, -1, 0, 3],
                                  [1, 1, 1, 1, 1, 1]])

    leftCornerKernel = cv2.flip(rightCornerkernel, 1)

    return leftCornerKernel, rightCornerKernel