c++ - 返回简历 :Mat pointer to main function

标签 c++ opencv c++11 image-processing

我写了一个属于 panoramic_distance 类的函数。此函数将 images/cv:Mat 数组返回给主函数。但是我对如何从 main 函数访问图像数组的内容有点困惑,因为当我调用 cv::imshow 时附加代码给我段错误。

class panoramic_distance 
{  
    cv::Mat* breakimageinstrips(cv::Mat image, bool vertical, int no_strips)
    {      
        cv:Mat split_image[6];
        int d_factor;

        d_factor=image.cols/3;
        split_image[0] = image(Rect(0,0,d_factor,image.rows));
        split_image[1] = image(Rect(d_factor,0,d_factor,image.rows));
        split_image[2] = image(Rect((2*d_factor),0,d_factor,image.rows));
        std::cout<<"\n Image slip in 3";
        std::cout<<" address = "<<split_image;
        split_images1=split_image;
        std::cout<<" addressss = "<<split_images1;
        return split_images1;


        return split_image;
    }     

};

int main( int argc, char** argv )
{
    panoramic_distance p1;
    cv::Mat *images;
    images=p1.breakimageinstrips(t1,1,3);
    std::cout<<" \n"<<images<<std::endl;  
    cv::imshow("This image",*(image));
    return 0;
}

如果我评论 cv::imshow 那么它不会给出段错误并有以下输出。这意味着 cv:Mat 数组的地址被传输到 main 但我不知道如何访问数组的内容。代码没有问题但问题是如何访问 cv:Mat main 函数中的数组内容。

输出:

0x47d6ecfa0

Image slip in 3 address = 0x7ffe7d6ecbd0 addressss = 0x7ffe7d6ecbd0
0x7ffe7d6ecbd0

RUN FINISHED; exit value 0; real time: 10ms; user: 0ms; system: 0ms

最佳答案

您正在返回指向本地数组(的第一项)的指针。函数返回后,该数组不再存在。它被称为悬挂指针,它给你正式的未定义行为,最好避免。

我已经很久没有涉足 OpenCV 了,但我记得 cv::Mat 本身很像一个智能指针,你可以直接按值返回。

关于c++ - 返回简历 :Mat pointer to main function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742293/

相关文章:

c++ - 自旋锁是否保证获取顺序?

python - 使用 OpenCv 和 python 进行 RGB-D 姿态估计

file - OpenCv SVMligh 错误。 “正在写入 alpha 文件...... ______________ 没有这样的文件或目录

c++ - 带文本叠加的双缓冲 AlphaBlend 矩形

c++ - OpenCV - 来自两个垂直 2D 图像的 3D 真实世界坐标

c - 保存日期格式为 yyyy_mm_dd hh_mm_ss 的文件名

c++ - 显式移动构造函数?

c++ - 如何获取 c++0x lambda 表达式的类型?

c++ - 将字符串宏/常量转换为宽字符/Unicode

c++ - 将 0 转换为 void