1 | initial version |
ah, don't loop. totally not the opencv way.
Mat a(10,10,CV_8U,Scalar(3));
int dx=-3, dy=2; // new Rect: Rect moved(dx, dy, a.cols, a.rows);
// clip against original bounds: Rect bounds(0, 0, a.cols, a.rows); moved = moved & bounds;
Mat b(a.size(), a.type(), Scalar(0));
a(moved).copyTo(b(moved));
cerr << moved << endl; cerr << a << endl; cerr << b << endl;
[7 x 8 from (0, 2)] [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0; 3, 3, 3, 3, 3, 3, 3, 0, 0, 0]
2 | No.2 Revision |
ah, don't loop. totally not not the opencv way.way ;).
Mat Mat b(a.size(), a.type(), Scalar(0));
a(moved).copyTo(b(moved));
[7 x 8 from (0, 2)]
[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 3 | No.3 Revision |
ah, don't loop. totally not the opencv way ;).
Mat a(10, 10, CV_8U, Scalar(3)); Scalar::all(3)); // src image, filled with 3 for demo here
Mat b(a.size(), a.type(), Scalar(0)); // dst image (pre-filled with zero)
int dx=-3, dy=2; // 3 to the left, 2 down
// calculate the new Rect:
Rect moved(dx, dy, a.cols, a.rows);
// clip against original bounds:
Rect bounds(0, 0, a.cols, a.rows);
moved = moved & bounds; // <-- here's the trick.
a(moved).copyTo(b(moved)); // copy rois
cerr << moved << endl;
cerr << a << endl;
cerr << b << endl;
[7 x 8 from (0, 2)]
[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0]
4 | No.4 Revision |
ah, don't loop. totally not the opencv way ;).
Mat a(10, 10, CV_8U, Scalar::all(3)); // src image, filled with 3 for demo here
Mat b(a.size(), a.type(), Scalar(0)); Scalar::all(0)); // dst image (pre-filled with zero)
int dx=-3, dy=2; // 3 to the left, 2 down
// calculate the new Rect:
Rect moved(dx, dy, a.cols, a.rows);
// clip against original bounds:
Rect bounds(0, 0, a.cols, a.rows);
moved = moved & bounds; // <-- here's the trick.
a(moved).copyTo(b(moved)); // copy rois
cerr << moved << endl;
cerr << a << endl;
cerr << b << endl;
[7 x 8 from (0, 2)]
[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0]
5 | No.5 Revision |
ah, don't loop. totally not the opencv way ;).[edit: original code was wrong, see comments below]
Mat a(10, 10, a(480, 640, CV_8U, Scalar::all(3)); Scalar::all(0)); // src image, filled with 3 for demo here
Mat b(a.size(), a.type(), Scalar::all(0));
circle( a, Point(500,400), 40, Scalar(255), -1); // dst image (pre-filled with zero)
filled circle
rectangle( a, Point(1,1), Point(a.size()), Scalar(255), 2); // border
int dx=-3, dy=2; // 3 to the left, 2 down
dx=-300, dy=-300;
// calculate the new Rect:
Rects:
Rect moved(dx, moved_dst(dx, dy, a.cols, a.rows);
Rect moved_src(-dx, -dy, a.cols, a.rows);
// clip against original bounds:
Rect bounds(0, 0, a.cols, a.rows);
moved Rect clipped_src = moved moved_src & bounds;
Rect clipped_dst = moved_dst & bounds; // <-- here's the trick.
a(moved).copyTo(b(moved));
a(clipped_src).copyTo(b(clipped_dst)); // copy rois
cerr << moved clipped_src << endl;
cerr << a clipped_dst << endl;
cerr << b << endl;
Mat show;
show.push_back(a);
show.push_back(b);
[7 x 8 from (0, 2)]
[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0;
3, 3, 3, 3, 3, 3, 3, 0, 0, 0]