本文共 3066 字,大约阅读时间需要 10 分钟。
由于对图像的操作存在拉伸变换,造成变换前后图像像素点位置发生变化。
选择临近的像素。简单,效果较差
选择临近两个像素,建立一次函数,进行投影,得到的数据
选择临近的四个像素,四个像素两两建立一次函数,再把像素投影到建立好的一次函数上再次建立一次函数得到数据。
应用图像的拉伸变换、旋转、仿射变换、透视变换等涉及到对图像像素位置改变的情况。
resize()
void cv::resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR)
fx , yx 与 dsize 若存在冲突选用dsize
//************************************// Method: sizeChange// FullName: sizeChange// Access: public // Returns: void// Qualifier: 尺寸变换//************************************void sizeChange(){ // 尺寸变换 Mat smallImg, bigImg0, bigImg1, bigImg2; Mat gray = imread("./lena.png", IMREAD_GRAYSCALE); // 缩小 resize(gray, smallImg, Size(15, 15), 0, 0, INTER_AREA); // 最近邻插值放大 resize(smallImg, bigImg0, Size(30, 30), 0, 0, INTER_NEAREST); // 双线性插值 resize(smallImg, bigImg1, Size(30, 30), 0, 0, INTER_LINEAR); // 双三次插值 resize(smallImg, bigImg2, Size(30, 30), 0, 0, INTER_CUBIC); namedWindow("smallImage", WINDOW_NORMAL); imshow("smallImage", smallImg); namedWindow("bigImg0", WINDOW_NORMAL); imshow("bigImg0", bigImg0); namedWindow("bigImg1", WINDOW_NORMAL); imshow("bigImg1", bigImg1); namedWindow("bigImg2", WINDOW_NORMAL); imshow("bigImg2", bigImg2); waitKey(0);}
flip()
void cv::flip(InputArray src, OutputArray dst, int flipCode)
src:输入图像
dst:输出图像
flipCode:翻转方式标志
标志 | 含义 |
---|---|
大于0 | 绕y轴进行翻转 |
等于0 | 绕x轴进行翻转 |
小于0 | 绕两个轴进行翻转 |
//************************************// Method: reverImg// FullName: reverImg// Access: public // Returns: void// Qualifier: 图像翻转//************************************void reverImg(){ Mat img = imread("./lena.png"); Mat imgx, imgy, imgx_y; flip(img, imgx, 0); flip(img, imgy, 1); flip(img, imgx_y, -1); imshow("img", img); imshow("imgx", imgx); imshow("imgy", imgy); imshow("imgx_y", imgx_y); waitKey(0);}
vconcat()纵向连接
void cv::vconcat(const Mat* src, size_t nsrc, OutputArray dst)
横向拼接要求高度一致
纵向拼接要求宽度一致
void cv::vconcat(InputArray src1, InputArray src2, OutputArray dst)
hconcat纵向连接
void cv::hconcat(const Mat* src, size_t nsrc, OutputtArray dst)
void cv::hconcat(InputtArray src1, InputtArray src2, OutputtArray dst)
//************************************// Method: imgJoint// FullName: imgJoint// Access: public // Returns: void// Qualifier: 图像拼接//************************************void imgJoint(){ Mat img00 = imread("./img00.png"); Mat img01 = imread("./img01.png"); Mat img10 = imread("./img10.png"); Mat img11 = imread("./img11.png"); Mat imgl, imgr, img; // 纵向拼接 vconcat(img00, img10, imgl); vconcat(img01, img11, imgr); // 横向拼接 hconcat(imgl, imgr, img);}
转载地址:http://jgkq.baihongyu.com/