cv::Mat m
私の仕事は、次のようにr
行と列の a を定期的に更新することですc
。
1
全体を右に 1 列ずつシフトしm
、位置の最後の列を削除しますc-1
- 位置に新しい列をランダムに生成します
0
- のプロットを更新する
m
これにより、わかりやすくするために、一種のベルト コンベア シミュレーションが行われます。ただし、シフトする必要がある場合は、ポイント1で問題が発生します。m
AとBという 2 つの異なるソリューションが見つかりましたが、どちらも同じ結果になりました。これは、私が何か間違ったことをしていることを示唆しています。
方法Aは次のとおりです。
int offset = 1;
cv::Mat tmp = cv::Mat::zeros(m.size(), m.type());
cv::Rect rect_src(0, 0, m.cols-offset, m.rows);
cv::Rect rect_dst(offset, 0, m.cols-offset, m.rows);
cv::Mat in = m(rect_src);
cv::Mat out = tmp(rect_dst);
in.copyTo(out);
m = temp;
方法Bは次のとおりです。
int offset = 1;
cv::Mat trans_mat = (cv::Mat_<double>(2, 3) << 1, 0, offset, 0, 1, 0);
cv::Mat warped;
warpAffine(m, warped, trans_mat, m.size());
m = warped;
そして、ここに小さな例としての出力がありますm
(ランダムな値が左側に生成されています):
サイクル1
90 0 0 0 0 0 0 0 0
143 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
サイクル 2
0 0 90 0 0 0 0 0 0
0 0 143 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
サイクル3
0 0 144 0 90 0 0 0 0
0 0 161 0 143 0 0 0 0
0 0 0 0 0 0 0 0 0
ゼロで構成された余分な列が何らかの形で表示されることは明らかです...そして私は本当にその方法を理解できません。
PSoffset = 3
出力スケールを係数2
などで設定した場合。
90 0 0 0 0 0 0 0 0
143 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
サイクル 2
0 0 0 0 0 0 90 0 0
0 0 0 0 0 0 143 0 0
0 0 0 0 0 0 0 0 0