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();