gpt4 book ai didi

c++ - OpenCV minMaxLoc 函数中的段错误

转载 作者:行者123 更新时间:2023-11-28 00:51:10 29 4
gpt4 key购买 nike

昨天我有一个类似的问题,并且能够推断出错误,感谢您的帮助。好吧,今天我遇到了一个非常相似的问题,但是以我最好的水平,仍然无法定位到这段特定代码中的段错误的原因。

    int main()
{
Mat src,dst,src_gray;
int kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = CV_16S;
char* window_name = "sharpness estimate";
string dir = string("erez images");
vector<string> files = vector<string>();
getdir(dir,files);
cout<<files.size()<<endl;
int c;
double *estimate=0,*min=0;
Point *minLoc=0,*maxLoc=0;
string parent = "/home/siddarth/examplescv/erez images/";
for(int i=1; i<=files.size()-2;i++)
{
cout<<files.data()[i]<<endl<<i<<endl;
string path = parent+files.data()[i];
cout<<path<<endl;
src = imread(path);

if( !src.data )
{
return -1;
}

cout<<"check1"<<endl;
cvtColor(src,src_gray,CV_RGB2GRAY);

Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
//convertScaleAbs(dst,abs_dst);
cout<<"check2"<<endl;
minMaxLoc(dst,min,estimate,minLoc,maxLoc,noArray());
cout<<"estimate :"<<*estimate<<endl;

}
waitKey(100000000000);
return 0;
}

我能够在运行时进行到 check2。我的猜测是段错误是由 minMaxLoc 引起的。请帮我解决这个问题。如果您能告诉我将来如何处理段错误以及为什么会出现段错误,我也将非常高兴。它究竟意味着什么?

注意:getDir函数是我自己写的,不是内置的。它只是给了我给定目录中的目录和文件列表。

正在 linux 中执行 opencvUbuntu 11.10 和 OpenCv2.4.3

调试器的输出:

"Program received signal SIGSEGV, Segmentation fault. 0x001b7c5c in cv::minMaxIdx(cv::_InputArray const&, double*, double*, int*, int*, cv::_InputArray const&) () from /usr/local/lib/libopencv_core.so.2.4"

最佳答案

看你的代码,没有调试,我猜问题出在dst,它还没有被初始化。

在尝试使用它之前,您必须为矩阵分配内存。

Check this link to the OpenCv documentation ,它有一个关于如何使用 minMaxLoc()非常的好例子。特别注意那里的第 7 项。

但是,正如评论中所述,学习使用调试器,在运行时检查所有变量,检查是否有 NULL 应该有值,是一件值得学习的事情。调试器是程序员最好的 friend ;)

我看到的另一个问题是 estimation,它是 NULL,您在调用 minMaxLoc 之后尝试取消引用它。根据我对这个函数的内存,它不会改变估计值,但我可能是错的。

关于c++ - OpenCV minMaxLoc 函数中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14038970/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com