int Mat_Img_Cat(Mat & A, Mat & B, Mat & out,int flag)
{
if(flag == 0)
{
int w = A.cols + B.cols;
int h = MAX(A.rows ,B.rows);
Mat image(h,w,A.type());
int channel = A.channels();
if(channel == 3)
{
for(int j = 0; j < A.rows; j++)
for(int i = 0; i < A.cols; i++)
{
image.data[j * image.cols * 3 + 3*i ] = A.data[j * A.cols * 3+ 3*i ] ;
image.data[j * image.cols * 3 + 3*i+1 ] = A.data[j * A.cols* 3 + 3*i +1] ;
image.data[j * image.cols * 3 + 3*i+2 ] = A.data[j * A.cols* 3 + 3*i+2 ] ;
}
for(int j = 0; j < B.rows; j++)
for(int i = 0; i < B.cols; i++)
{
image.data[j * image.cols * 3 + A.cols * 3+ 3*i ] = B.data[j * B.cols * 3+ 3*i ] ;
image.data[j * image.cols * 3 + A.cols * 3+3*i+1 ] = B.data[j * B.cols* 3 + 3*i +1] ;
image.data[j * image.cols * 3 + A.cols * 3+3*i+2 ] = B.data[j * B.cols* 3 + 3*i+2 ] ;
}
image.copyTo(out);
}
else
{
for(int j = 0; j < A.rows; j++)
for(int i = 0; i < A.cols; i++)
{
image.data[j * image.cols + i ] = A.data[j * A.cols + i ] ;
}
for(int j = 0; j < B.rows; j++)
for(int i = 0; i < B.cols; i++)
{
image.data[j * image.cols + A.cols + i ] = B.data[j * B.cols + i ] ;
}
image.copyTo(out);
}
}else
{
int w =MAX( A.cols , B.cols);
int h = A.rows +B.rows;
Mat image(h,w,A.type());
int channel = A.channels();
if(channel == 3)
{
for(int j = 0; j < A.rows; j++)
for(int i = 0; i < A.cols; i++)
{
image.data[j * image.cols * 3 + 3*i ] = A.data[j * A.cols * 3+ 3*i ] ;
image.data[j * image.cols * 3 + 3*i+1 ] = A.data[j * A.cols* 3 + 3*i +1] ;
image.data[j * image.cols * 3 + 3*i+2 ] = A.data[j * A.cols* 3 + 3*i+2 ] ;
}
for(int j = 0; j < B.rows; j++)
for(int i = 0; i < B.cols; i++)
{
image.data[(j +A.rows)* image.cols * 3 + 3*i ] = B.data[j * B.cols * 3+ 3*i ] ;
image.data[(j +A.rows) * image.cols * 3 +3*i+1 ] = B.data[j * B.cols* 3 + 3*i +1] ;
image.data[(j +A.rows) * image.cols * 3 + 3*i+2 ] = B.data[j * B.cols* 3 + 3*i+2 ] ;
}
image.copyTo(out);
}
else
{
for(int j = 0; j < A.rows; j++)
for(int i = 0; i < A.cols; i++)
{
image.data[j * image.cols + i ] = A.data[j * A.cols + i ] ;
}
for(int j = 0; j < B.rows; j++)
for(int i = 0; i < B.cols; i++)
{
image.data[(j +A.rows)* image.cols + i ] = B.data[j * B.cols + i ] ;
}
image.copyTo(out);
}
}
return 0;
}
记录一下
opencv Mat 图像拼凑
最新推荐文章于 2023-08-25 15:16:06 发布