python中data是什么意思_C++中cv::Mat中的data属性对应在python中是什么

1, 因为我要使用一个dll,看C++的代码,是这样调用的

using namespace cv;

m_image_mat = imread ( full_file_name );

data = m_image_mat.data

这里有一个data属性

2,在python中,我刚开始用cv2包的imread加载图片,后来发现高版本的opencv3.2版本的导入图片是numpy array类型的数据,而不是mat类型的,网上查询的解决办法是使用cv包,转换array对象为cvmat对象

import cv2

import cv2.cv as cv

img = cv2.imread('1.jpg')

cvmat = cv.fromarray(img)

cvmat对象含有cvmat.width, cvmat.height, cvmat.step, 就是没有cvmat.data

AttributeError: 'cv2.cv.cvmat' object has no attribute 'data'

看起来C++ cv的Mat和python cvmat中定义的类还是有不同的

我查看了uchar* cv::Mat::data的说明,“pointer to the data” 那么data的类型是什么样的呢

先谢谢了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 调用一个接受 `cv::Mat` 数据的 C++ 函数,可以使用 `Boost.Python` 库。 假设有如下的 C++ 代码: ```cpp #include <opencv2/opencv.hpp> void process_image(cv::Mat image) { // 对图像进行处理 // ... } ``` 则需要使用 `Boost.Python` 来将 `process_image` 函数导出到 Python 。示例代码如下: ```cpp #include <boost/python.hpp> #include <opencv2/opencv.hpp> #include <numpy/arrayobject.h> using namespace boost::python; void process_image(cv::Mat image) { // 对图像进行处理 // ... } // 将 cv::Mat 转换为 numpy.ndarray PyObject* mat_to_ndarray(const cv::Mat& mat) { npy_intp dims[2] = { mat.rows, mat.cols }; int dtype = NPY_UINT8; int channels = mat.channels(); if (channels == 1) { dtype = NPY_UINT8; } else if (channels == 3) { dtype = NPY_UINT8; } else if (channels == 4) { dtype = NPY_UINT8; } PyObject* pyobj = PyArray_SimpleNewFromData(2, dims, dtype, mat.data); PyObject* capsule = PyCapsule_New((void*)mat.data, NULL, NULL); PyArray_SetBaseObject((PyArrayObject*)pyobj, capsule); return pyobj; } // 将 numpy.ndarray 转换为 cv::Mat cv::Mat ndarray_to_mat(PyObject* ndarray) { PyArrayObject* np_array = (PyArrayObject*)ndarray; int ndims = PyArray_NDIM(np_array); npy_intp* dims = PyArray_DIMS(np_array); int dtype = PyArray_TYPE(np_array); int channels = (dtype == NPY_UINT8) ? 1 : 3; if (ndims == 3) { channels = dims[2]; } cv::Mat mat(dims[0], dims[1], CV_MAKETYPE(dtype, channels), PyArray_DATA(np_array)); return mat.clone(); } BOOST_PYTHON_MODULE(my_module) { import_array(); // 初始化 NumPy // 导出 process_image 函数 def("process_image", process_image); // 导出 mat_to_ndarray 函数 def("mat_to_ndarray", mat_to_ndarray); // 导出 ndarray_to_mat 函数 def("ndarray_to_mat", ndarray_to_mat); } ``` 在 Python ,可以按照以下方式调用 C++ 函数 `process_image`: ```python import numpy as np import cv2 import my_module # 读取图像 image = cv2.imread("image.jpg") # 将 cv::Mat 转换为 numpy.ndarray image_array = my_module.mat_to_ndarray(image) # 调用 C++ 函数处理图像 my_module.process_image(image_array) ``` 注意:在使用 NumPy 数组时,需要先初始化 NumPy,可以使用 `import_array()` 函数进行初始化。同时,为了避免内存释放问题,需要在 `mat_to_ndarray` 函数使用 `PyCapsule_New` 函数创建一个新的 Python 对象,并将其作为 `numpy.ndarray` 的基础对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值