この質問は、実際にこれに取り組んだ Mohamed Aly が答えたほうがよいかもしれません。彼の連絡先はあなたがリンクしたページにあります。
とは言え、見てみましょう。(これをスキップしたい場合は TLDR があります) cxarray.cppファイルの cvGetMat が原因でエラーが発生します。最初の数行は次のとおりです。
2362 cvGetMat( const CvArr* array, CvMat* mat,
2363 int* pCOI, int allowND )
2364 {
2365 CvMat* result = 0;
2366 CvMat* src = (CvMat*)array;
2367 int coi = 0;
2368
2369 if( !mat || !src )
2370 CV_Error( CV_StsNullPtr, "NULL array pointer is passed" );
...
return result;
}
画像にデータが含まれているかどうかを実際に確認するのは、後になってからです。
それでは、Aly 氏が cvGetMat() を使用した場所を見つけてみましょう。運がいい!彼がコメントアウトせずに使用した場所は 1 つだけです。ファイルは mcv.cc です。
void mcvLoadImage(const char *filename, CvMat **clrImage, CvMat** channelImage)
{
// load the image
IplImage* im;
im = cvLoadImage(filename, CV_LOAD_IMAGE_COLOR);
// convert to mat and get first channel
CvMat temp;
cvGetMat(im, &temp);
*clrImage = cvCloneMat(&temp);
// convert to single channel
CvMat *schannel_mat;
CvMat* tchannelImage = cvCreateMat(im->height, im->width, INT_MAT_TYPE);
cvSplit(*clrImage, tchannelImage, NULL, NULL, NULL);
// convert to float
*channelImage = cvCreateMat(im->height, im->width, FLOAT_MAT_TYPE);
cvConvertScale(tchannelImage, *channelImage, 1./255);
// destroy
cvReleaseMat(&tchannelImage);
cvReleaseImage(&im);
}
これは明らかに、指定したファイル名の最終的な場所です。ここには何も問題はありません。画像が実際にコードにロードされていることを再確認してくれればよいのですが、厳密には必要ではありません。cvGetMat には、画像とそれが書き込まれるマットの 2 つの入力があります。マットは問題ないはずなので、画像を確認する必要があります。cvLoadImage は、ファイルが存在するかどうかに関係なく、エラーを発生させることなく、任意のファイル名で機能します。そのため、ファイル名が無傷であることを確認する必要があります。mcvLoadImage は main.cc ファイルの ProcessImage(*) で呼び出されますが、これによりファイル名も渡されます。ProcessImage は Process() で呼び出され、ファイル名は、それが言うときに出力されるのと同じ文字列として配置されます
加工画像:/home/me/caltech-lanes/cordova1/f00000.png
もちろん、それはただの文字列です - 彼は事前にファイルを読み込むことができるかどうかをチェックしていませんでした.実際、まだ読めるかどうかはわかりません。」
TLDR:(そして、私はあなたを責めることはできません)したがって、主な問題は、eogがファイルを表示できるにもかかわらず、ファイルを読み取れないことのようです。私が提案できる唯一のことは、フォルダー cordova1 を C:/Test/cordova1/ のような場所に移動しようとすること、または (コンピューターにそれが機能しない設定がある場合) C:/Users/[You]/ cordova1/ そこにあるファイルを使用して、
$ ./LaneDetector32 --show --list-file=/home/me/caltech-lanes/cordova1/list.txt --list-path=/home/me/caltech-lanes/cordova1/ --output-suffix=_result
車線検出プログラムが実際にファイルを読み取ることを妨げているパーミッション エラーであるかどうかを確認します。