首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从独立函数返回包含数据的cv::Mat

如何从独立函数返回包含数据的cv::Mat
EN

Stack Overflow用户
提问于 2018-08-05 00:29:34
回答 1查看 695关注 0票数 0

下面是一个类似如下的函数:

代码语言:javascript
复制
cv::Mat func(const std::string& path) {
    cv::Mat img = cv::imread(path, CV_LOAD_IMAGE_GRAYSCALE);
    int n_col = img.cols;
    int n_row = img.rows;
    img.convertTo(result, CV_32F);
    float* data_in = (float*)img.data;

    do some computation...

    cv::Mat result = cv::Mat(n_row, n_col, CV_32FC1, data_in);
    return result;
}

主要功能:

代码语言:javascript
复制
int main(){
    ...
    cv::Mat result = func(path);
    cv::imwrite("result.bmp", result);
    ...
}

当这段代码运行到cv::imwrite("result.bmp", result);中时,它将捕获异常。我使用vs2013查看从func返回的结果,它不是空的,并且与img具有相同的维度。

有人能帮我找出哪里出错了吗?

有没有更好的方法来实现cv::Mat func(const std::string& path)**?**的功能?

回答:cv::Mat result = cv::Mat(n_row, n_col, CV_32FC1, data_in);更改为cv::Mat result = cv::Mat(n_row, n_col, CV_32FC1, data_in).clone(); works

Explaination:当我用float* data_in构造Mat时,OpenCV只初始化指向指定数据的矩阵头,这意味着没有数据被复制

外部数据不会自动释放,而是在func结束时销毁。这将捕获异常。

EN

回答 1

Stack Overflow用户

发布于 2018-08-05 02:23:03

试试这个:

代码语言:javascript
复制
cv::Mat func(const std::string& path)
{
    cv::Mat img = cv::imread(path,CV_LOAD_IMAGE_GRAYSCALE);

do some computation...

    cv::Mat result;
    img.convertTo(result, CV_32F);

    return result;
}

如果要深度复制wn图像,请使用.clone()或.copyTo()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51687536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档