1

この基本的なコードでセグメンテーション違反が発生し続けます。私はC++が初めてで、本当に手を使うことができました。これは問題の原因のコード スニペットです。

int main ()
{

cv::Mat pic1;

pic1 = takePicture();

imwrite("/home/pi/***/images/pic1.jpg", pic1);

}

cv::Mat takePicture(){
    cv::Mat pic;
    VideoCapture cam(0);
    while(!cam.isOpened()){
        std::cout << "Failed to make connection to cam" << std::endl;
        VideoCapture cam(0);
    }
    cam >> pic;
    return pic;
}

この質問を投稿する前に次のリンクを確認しましたが、言われたことは役に立たないようです。私も参照渡しを試みました。 関数内でMatを変更するOpenCV(Matスコープ)

4

1 に答える 1

1

これは、あなたのコードを見てドライランが私に教えてくれるものです:-

と言うpic1 = takePicture()と、cv::Mat のコピーコンストラクタを呼び出します。cv::Mat のコピー コンストラクターは、データ全体ではなく、ヘッダーのみをコピーすることによって機能します。その結果、範囲外になると、そのオブジェクトは破棄され、データも破棄されます。pic

あなたができるpic1 = takePicture().clone()

ここで利用可能なコピー コンストラクターの詳細: https://stackoverflow.com/a/11019585/1933672

于 2014-03-27T14:02:54.487 に答える