昨日も同様の質問があり、あなたの助けのおかげでエラーを推論することができました. さて、今日、私は非常によく似た問題に遭遇しましたが、私のレベルが最高でも、この特定のコードでセグメンテーション違反の原因を突き止めることができません。
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 Ubuntu 11.10およびOpenCv2.4.3でopencvを実行しています
デバッガーの出力:
"プログラムは信号 SIGSEGV、セグメンテーション違反を受け取りました。0x001b7c5c in cv::minMaxIdx(cv::_InputArray const&, double*, double*, int*, int*, cv::_InputArray const&) () from /usr/local/lib/ libopencv_core.so.2.4"