本文共 3082 字,大约阅读时间需要 10 分钟。
V_EXPORTS_W void resize( InputArray src, OutputArray dst,Size dsize, double fx=0, double fy=0,int interpolation=INTER_LINEAR );src:输入图像,Mat类型即可dst:输出图像,当其非0时,由dsize确定尺寸dsize: Size类型,指定输出图像大小,如果它等于0,由下式计算∶dsize = Size(round(fx*src.cols), round(fy*src.rows))fx:沿水平方向的缩放系数,默认值0,等于0时﹐由下式计算︰(double)dsize.width/src.colsfy:沿垂直方向的缩放系数﹐默认值0,等于0时,由下式计算︰(double)dsize.height/src.rowsinterpolation:用于指定插值方式,默认为INTER_LINEAR(线性插值)
Mat img = imread("E:\\OpenCV\\images\\car.jpg");Mat dst;resize(img, dst, Size(300, 300));imshow("img", img);imshow("dst", dst);waitKey();
Mat imgTranslate(Mat &srcImg, int xOffset, int yOffset){ int rows = srcImg.rows; int cols = srcImg.cols; Mat dstImg = Mat::zeros(srcImg.size(), srcImg.type()); //创建全黑图像 for(int i=0; i=0 && y>=0 && x (y, x) = srcImg.at (i, j); } } } return dstImg;}
Mat imgTranslate2(Mat &srcImg, int xOffset, int yOffset){ int rows = srcImg.rows + yOffset; int cols = srcImg.cols + xOffset; Mat dstImg = Mat::zeros(rows, cols, srcImg.type()); //创建全黑图像 for(int i=0; i=0 && y>=0 && x (y, x) = srcImg.at (i, j); } } } return dstImg;}
OpenCV并没有提供图像旋转专门的函数,但我们可以用以下函数简单实现
getRotationMatrix2D来获得旋转矩阵, 这个函数返回一个矩阵
//Point2f center:表示旋转的中心点,主要中心点是Point2f类型//double angle:表示旋转的角度//double scale:图像缩放因子Mat roateM=getRotationMatrix2D(Point2f(img.cols, img.rows), 30, 0.5);
void cv::warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR, int borderMode = BORDER_CONSTANT, const Scalar &borderValue = Scalar())//src: 输入图像//dst: 输出图像,尺寸由dsize指定,图像类型与原图像一致//M: 2X3的变换矩阵//dsize: 指定图像输出尺寸//flags: 插值算法标识符,有默认值INTER_LINEAR,如果插值算法为WARP_INVERSE_MAP, warpAffine函数使用如下矩阵进行图像转换
Mat img = imread("E:\\OpenCV\\images\\logo.jpg");Mat roateM = getRotationMatrix2D(Point2f(img.cols, img.rows), 30, 0.5);//roate里的size控制的是旋转图片的大小Mat dst;warpAffine(img,dst,roateM,Size(300,300));//warpAffine里的size控制的是画布的大小imshow("img", dst);waitKey();
Mat img = imread("E:\\OpenCV\\images\\car.jpg");Mat dst;transpose(img, dst);imshow("img", img);imshow("dst", dst);waitKey();
Mat img = imread("E:\\OpenCV\\images\\car.jpg");Mat dst;flip(img, dst, 90);//flip(img, dst, 0);//flipCode=0,垂直翻转(沿X轴翻转)://flipCode>0,水平翻转(沿丫轴翻转);//flipCode<0,水平垂直翻转(180°中心对称)imshow("img", img);imshow("dst", dst);waitKey();
Mat srcImg = imread("E:\\OpenCV\\images\\car.jpg");Mat dstImg;int rows = srcImg.rows;int cols = srcImg.cols;Mat xMapImg = Mat::zeros(srcImg.size(), CV_32FC1); //map1Mat yMapImg = Mat::zeros(srcImg.size(), CV_32FC1); //map2for (int i = 0; i< rows; i++){ for (int j = 0; j < cols; j++) { xMapImg.at(i, j) = j; //保持列不变,cols对于的是x的坐标 yMapImg.at (i, j) = i + 5 * sin(j / 10.0); //yMapImg.at (i, j) = rows - i; }}remap(srcImg, dstImg, xMapImg, yMapImg, INTER_LINEAR);imshow("src", srcImg);imshow("dst", dstImg);waitKey(0);
转载地址:http://rkmzi.baihongyu.com/