彩色图像向右平移N个像素,前面用0补齐
#include <opencv.hpp>
using namespace cv;
int main()
{
/*载入图像并显示*/
Mat img = imread("D:\\1.bmp");
imshow("原图", img);
uchar *src = img.data;
Mat grayDst;
Mat graySrc(img.rows, img.cols, CV_8UC3, src);
//改变显示窗口大小
namedWindow("test", 0);
resizeWindow("test", Size(400, 300));
//改变图片大小
resize(graySrc, grayDst, cv::Size(800, 600), 0, 0, cv::INTER_LINEAR);
imshow("test", graySrc);
/*确定需要平移的量*/
int col_trans = 20;
/*创建同尺寸的Mat并初始化为0*/
Mat newImg = Mat::zeros(img.rows, img.cols, CV_8UC3);
/*平移*/
for (int i = 0; i < img.rows; i++)
{
for (int j = 0; j < img.cols- col_trans; j++)
{
newImg.at<Vec3b>(i, j + col_trans) = img.at<Vec3b>(i, j);
//newImg.at<Vec3b>(i, j+ col_trans)[0] = img.at<Vec3b>(i, j)[0];
//newImg.at<Vec3b>(i, j+ col_trans)[1] = img.at<Vec3b>(i, j)[1];
//newImg.at<Vec3b>(i, j+ col_trans)[2] = img.at<Vec3b>(i, j)[2];
}
}
imshow("效果图", newImg);
bool b = imwrite("D:\\3.bmp", newImg);
waitKey(0);
return 0;
}