opencvで画像と画像を水平方向に連結しようと思い、cv::hconcatという関数を使ったところ、例外が発生してしまいました。
cv::Mat Combine(const cv::Mat &x, const cv::Mat &y)
{
cv::Mat ret;
cv::hconcat(x, y, ret);//ここでハンドルされない例外が発生する
return ret;
}
0xC0000005: 場所 0x000001572172E000 への書き込み中にアクセス違反が発生しました。
という例外が発生します。
調べてみたところ、 0xC0000005 の主な原因が
メモリ領域外にアクセス、メモリ不足
らしく、
struct MatPair
{
cv::Mat a,b;
};
std::vector<MatPair> array;
void Func()
{
for(auto &i : array)
{
auto combined = Combine(i.a, i.b);
}
array.clear();
}
int main()
{
arrayにMatPairを1追加
Func();//例外なし
arrayにMatPairを10追加
Func();//例外でる
arrayにMatPairを100追加
Func();//例外でる
}
arrayにMatPairをひとつだけ追加してhconcatを行っても例外は出ず、
arrayにMatPairを10個ほど追加してhconcatを行うと例外がでました。
このことから、メモリ不足が原因かと思われましたが、
arrayにMatPairを100個ほど追加してhconcatを行っても例外がでました。
メモリ不足が原因ならMatPairを追加している時点で例外が出るような気がします。
だから原因は範囲外アクセス、、、?いやけど、メモリ不足、、、、?
というわけでわからなくなってしまいました^p^
[hr]
配列にcv::Matのペアを保持し、そのMatのペアにcv::hconcatを使うとアクセス違反の例外が出ます。
原因がわかる方おりましたらお教えください<(_ _)>
オフトピック
合わせてこちらも確認してもらえるとうれしいです^p^
http://dixq.net/forum/viewtopic.php?f=3 ... 24#p146224
http://dixq.net/forum/viewtopic.php?f=3 ... 24#p146224