opencv で C++ Mat データ割り当ての問題をデバッグすると、セグメンテーション違反が発生します (コアがダンプされています)

Mat 割り当てエラーの記録:
通常、ソフトウェアへのアルゴリズムのインターフェイスには Mat タイプがなく、Mat データ、幅、高さを調整するには unsigned char* を渡す必要があります。たとえば、
次のインターフェイスは 2 つの画像を定義します。カメラが画像を比較する処理後に返された結果、インターフェイス情報は次のとおりです。

//输入
struct OUTPUT_DATA {
    
    
	unsigned char *left_img_data;
	int left_img_width;
	int left_img_height;
	int left_img_channels;

	unsigned char *right_img_data;
	int right_img_width;
	int right_img_height;
	int right_img_channels;

};

OUTPUT_DATA は内部的に 2 つのピクチャの情報、つまり 2 つの Mat の情報を表します 間違いやすいのは unsigned char * の値の代入です:
主な手順:
(1) 構造体を表すための構造体ポインタのスペースを確保します情報:

OUTPUT_DATA *out=new OUTPUT_DATA ();
out->left_img_data = new unsigned char[2048 * 2448 * 3];
out->right_img_data = new unsigned char[2048 * 2448 * 3];

(2) マット情報に既に画像が含まれている場合:
例:

Mat img1 = imread("1.jpg");
Mat img2 = imread("2.jpg");

この時点で、img1 と img2 には 2 つの画像の情報が含まれており、それを外部式に渡すのは簡単です。

間違った割り当て:

out->left_img_data = img1.data;
out->right_img_data = img2.data;

正しい割り当て

memcpy(out->left_img_data, img1.data,
           img1.cols * img1.rows * img1.channels());
//out->left_img_data = img1.data;
out->left_img_width = img1.cols;
out->left_img_height = img1.rows;
out->left_img_channels = img1.channels();
memcpy(out->right_img_data, img2.data,
           img2.cols * img2.rows * img2.channels());

//out->left_img_data = img1.data;
out->right_img_width = img2.cols;
out->right_img_height = img2.rows;
out->right_img_channels = img2.channels();

おすすめ

転載: blog.csdn.net/llsplsp/article/details/132860098