You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让OpenCV的OutputArray返回一维数组而非二维单行矩阵

解决方案

方案1:修改C++侧代码(根源解决维度问题)

你当前C++代码中构造的是1行N列的二维cv::Mat,因此绑定到Python侧会生成二维ndarray。只需修改cv::Mat构造逻辑,生成一维数组即可:

bool myFunction(cv::OutputArray myOutputArray)
{
    //get some data for output..blah blah

    // 原写法:构造1行N列的二维Mat
    // cv::Mat(1, dataLength, CV_MAKETYPE(CV_8U, 1), data).copyTo(myOutputArray);
    // 修改后:构造长度为dataLength的一维Mat
    cv::Mat(dataLength, CV_MAKETYPE(CV_8U, 1), data).copyTo(myOutputArray);
}

修改后Python侧拿到的返回值就是一维ndarray,可直接通过my_data[i]的形式访问元素。

方案2:Python侧降维适配(无需修改C++代码)

如果不方便调整C++源码,在Python拿到返回值后做一次降维处理即可,可选写法如下:

# 写法1:直接取二维数组的第一行,返回视图
my_data = my_data[0]
# 写法2:flatten降维,返回新的数组拷贝
my_data = my_data.flatten()
# 写法3:ravel降维,优先返回视图,效率更高
my_data = my_data.ravel()

内容的提问来源于stack exchange,提问作者Harry Boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:06:01