Matlabには行列の列または行の循環シフトを実行するためのシフト関数があります。 OpenCVにも同様の機能がありますか?OpenCVでの行列のシフト(Matlab関数のような)行または列
3
A
答えて
0
短答、いいえ。 、cv::Mat::(cv::Range(rowRange), cv::Range(cv::colRange))
を使用した一時オブジェクトを使用するなど、実際に必要な場合は簡単に実装できます。
0
Pythonを使用している場合は、roll() methodだけです。
1
ここでは、循環行列シフトの実装を示します。どんな提案も大歓迎です。
//circular shift one row from up to down
void shiftRows(Mat& mat) {
Mat temp;
Mat m;
int k = (mat.rows-1);
mat.row(k).copyTo(temp);
for(; k > 0 ; k--) {
m = mat.row(k);
mat.row(k-1).copyTo(m);
}
m = mat.row(0);
temp.copyTo(m);
}
//circular shift n rows from up to down if n > 0, -n rows from down to up if n < 0
void shiftRows(Mat& mat,int n) {
if(n < 0) {
n = -n;
flip(mat,mat,0);
for(int k=0; k < n;k++) {
shiftRows(mat);
}
flip(mat,mat,0);
} else {
for(int k=0; k < n;k++) {
shiftRows(mat);
}
}
}
//circular shift n columns from left to right if n > 0, -n columns from right to left if n < 0
void shiftCols(Mat& mat, int n) {
if(n < 0){
n = -n;
flip(mat,mat,1);
transpose(mat,mat);
shiftRows(mat,n);
transpose(mat,mat);
flip(mat,mat,1);
} else {
transpose(mat,mat);
shiftRows(mat,n);
transpose(mat,mat);
}
}
3
私は、同じ質問を探しましたが、どれもが存在しないので、私は自分自身で書きました。もう一つの選択肢があります。私のコードでは、右または左にn回シフトすることができます:left numRight is -n, right +n
。
void shiftCol(Mat& out, Mat in, int numRight){
if(numRight == 0){
in.copyTo(out);
return;
}
int ncols = in.cols;
int nrows = in.rows;
out = Mat::zeros(in.size(), in.type());
numRight = numRight%ncols;
if(numRight < 0)
numRight = ncols+numRight;
in(cv::Rect(ncols-numRight,0, numRight,nrows)).copyTo(out(cv::Rect(0,0,numRight,nrows)));
in(cv::Rect(0,0, ncols-numRight,nrows)).copyTo(out(cv::Rect(numRight,0,ncols-numRight,nrows)));
}
これは一部の人に役立つことを望みます。同様に、shiftRowsを書くことができます
関連する問題
- 1. MATLAB関数行列パラメータ
- 2. Matlab - 関係行列
- 3. Matlab行列の行列の乗算 - ベクトル化またはbsxfun
- 4. matlabの行列に関係する関数のヘッセ行列を計算する
- 5. matlabまたはmathmaticaで要素が関数である行列の行列式を計算する方法
- 6. 行列内の値をシフト
- 7. Matlabの複数の列に複数の条件を満たす行列の行を見つけよう
- 8. simulink-matlab関数可変サイズ行列
- 9. 行列の行にノルム関数を適用 - MATLAB
- 10. フィルタ行列の列/行のデータをMATLAB
- 11. opencvの3x3行列の対数
- 12. Matlabの:行列の行と列のインデックスの効率的なマッチング
- 13. Matlabの行列積
- 14. Matlabメッシュプロット。 zのための特定の関数。 Zは行列でなければなりません
- 15. matlabのforループなしの行と列の行列乗算
- 16. 関数をMATLABの行列に適用する方法は?
- 17. ベクトル入力変数の行列関数を作成する(Matlab)
- 18. Matlab行列アクセス列
- 19. Matlabの複数行の文字列リテラル?
- 20. MATLABでループなしの行列計算
- 21. サブ行列に "all()"関数を適用できますか?[MATLAB]
- 22. MatLabのプロット関数行列の寸法誤差
- 23. Matlabのシンボリック関数の行列を抽出する方法
- 24. MATLABの関数内のデータ行列を使用する
- 25. 行列がMatlabの恒等行列かどうかをチェック
- 26. MATLABで並列関数を実行するには?
- 27. MATLABで行列の指数関数をとることは可能ですか?
- 28. opencvの行列型変換
- 29. Matlabで倍数ではなく整数を含む行列
- 30. matlabの複数配列にわたる完全な行
応答ありがとうございます。私はC + +を使用しています。最後に、最初のレスポンスで推奨されたメソッドrow()を使用して自分自身を実装しました。 – user1370912