在python中使用OpenCV创建Mat



我已经习惯了Java对OpenCV的实现。我想创建一个Mat结构,向其中填充数据,提取submat,然后应用一些图像变换。在Java中,我使用:

my_mat = new Mat(my_rows, my_cols, CvType.CV_8U);
my_mat.put(0, 0, my_data);
my_mat.submat(0, my_other_rows, 0, my_other_cols);

但我在python的OpenCV中没有发现任何工作。我在OpenCV论坛上找到了这个链接:cv2.CreateMat在python中,但链接已断开

尽管这个问题是很久以前提出的,但这应该会帮助今天寻求答案的人。

这应该适用于opencv版本>=2.X.在python中,opencv映像现在表示为numpy数组。因此,Mat对象可以简单地创建如下:

cvImg = np.zeros((rows, columns, channels), dtype = "uint8")

对于OpenCV 1.x:

您可以使用CreateMat来做到这一点:

创建矩阵标头并分配矩阵数据。

Python: cv.CreateMat(rows, cols, type) → mat
    Parameters: 
        rows – Number of rows in the matrix
        cols – Number of columns in the matrix
        type – The type of the matrix elements in the form CV_<bit depth><S|U|F>C<number of channels> , where S=signed, U=unsigned, F=float. For example, CV _ 8UC1 means the elements are 8-bit unsigned and the there is 1 channel, and CV _ 32SC2 means the elements are 32-bit signed and there are 2 channels.

函数调用等效于以下代码:

CvMat* mat = cvCreateMatHeader(rows, cols, type);
cvCreateData(mat);

对于cv2接口:

Python的新cv2接口将numpy数组集成到OpenCV框架中,这使得操作更加简单,因为它们是用简单的多维数组表示的。这里有一个开始的例子:

import numpy as np, cv
vis = np.zeros((384, 836), np.float32)
h,w = vis.shape
vis2 = cv.CreateMat(h, w, cv.CV_32FC3)
vis0 = cv.fromarray(vis)

相关内容

  • 没有找到相关文章

最新更新