我写了一个属于 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/