比较容易做的网站,妇女之家网站建设方案,phpstudy怎么创建网站,企业网站模板设计图像转置
transpose(src, dst);
transpose()可以实现像素下标的x和y轴坐标进行对调#xff1a;dst(i,j)src(j,i)#xff0c;接口形式
transpose(InputArray src, // 输入图像OutputArray dst, // 输出
) 图像翻转
flip(src, dst, 1);
flip()函数可以实现对图像的水平翻转…图像转置
transpose(src, dst);
transpose()可以实现像素下标的x和y轴坐标进行对调dst(i,j)src(j,i)接口形式
transpose(InputArray src, // 输入图像OutputArray dst, // 输出
) 图像翻转
flip(src, dst, 1);
flip()函数可以实现对图像的水平翻转、垂直翻转和双向翻转
void flip(InputArray src, // 输入图像OutputArray dst, // 输出int flipCode 0 // 0: 沿y-轴翻转, 0: 沿x-轴翻转, 0: x、y轴同时翻转);flip(img1,0)#水平轴翻转上下翻转
flip(img1,1)#垂直轴翻转左右翻转
flip(img1,-1)#双向翻转
1.flip(img1,0)#水平轴翻转上下翻转 2.flip(img1,1)#水平轴翻转左右翻转 3.flip(img1,-1)#双向翻转 代码显示
void QuickDemo::Flip_Demo(Mat image) {Mat dst;transpose(image, dst);//flip(image,dst,0);//上下翻转//flip(image,dst, 1);//左右翻转//flip(image, dst, -1);//对角翻转imshow(图像转置, dst);
} 图像旋转
warpAffine()仿射变换函数
warpAffine() 是 OpenCV 库中的一个函数用于进行二维仿射变换。该函数将输入图像映射到输出图像应用仿射变换。
void cv::warpAffine(InputArray src, OutputArray dst, InputArray mat, Size dsize Size(), int flags INTER_LINEAR, int borderMode BORDER_CONSTANT, Scalar borderValue Scalar());参数详解src输入图像必须是单通道或三通道的8位或32位浮点型图像。
dst输出图像其大小和类型与输入图像相同。
mat2x3的变换矩阵。
dsize输出图像的大小如果这个参数为 Size() 则输出图像的大小将与输入图像相同。
flags用于指定插值的方法默认为线性插值。可用的选项有 INTER_NEAREST, INTER_LINEAR, INTER_CUBIC 等。
borderMode用于指定如何处理输出图像边缘的像素默认为常量填充模式。可用的选项有 BORDER_CONSTANT, BORDER_REPLICATE, BORDER_WRAP 等。
borderValue用于指定填充的边界值默认为0。这个函数使用仿射变换来将输入图像映射到输出图像。仿射变换包括旋转、缩放、平移等操作但不包括扭曲和剪切。这个函数非常有用特别是在需要将图像映射到另一个大小或以特定方式旋转或倾斜图像时。
我这里写的是绕着图像的中心旋转
void QuickDemo::Rotate_Demo(Mat image) {Mat dst, M;int w image.cols;int h image.rows;M getRotationMatrix2D(Point(w / 2, h / 2), 45, 1.0);warpAffine(image, dst, M, Size(w, h), INTER_LINEAR, 0, Scalar(255, 0, 0));namedWindow(旋转演示, WINDOW_AUTOSIZE);imshow(旋转演示, dst);
} 注意演示过程中图片存在四个边缘丢失的情况需要进行改进 double cos abs(M.atdouble(0, 0));
double sin abs(M.atdouble(0, 1)); 这段代码的目的是从变换矩阵中提取余弦值和正弦值。这里的变换矩阵通常用于图像处理中的旋转操作特别是在使用OpenCV库时。具体来说这段代码做了以下几件事情 提取变换矩阵的元素通过M.atdouble(0, 0)和M.atdouble(0, 1)分别提取了变换矩阵的第一行第二列和第一行第三列的元素。这些元素在旋转矩阵中通常代表旋转角度的正弦和余弦值。 取绝对值使用abs()函数对提取的元素取绝对值。这是因为旋转矩阵中的正弦和余弦值可能是正数也可能是负数取决于旋转的方向。取绝对值可以确保无论旋转方向如何这些值都能正确表示旋转的角度。 应用场景这段代码通常出现在图像处理中特别是在需要计算图像旋转时。通过这个变换矩阵可以进一步计算图像旋转后的位置和大小。
根据上图重新为新图设置宽 高代码如下
void QuickDemo::Rotate_Demo(Mat image) {Mat dst, M;int w image.cols;int h image.rows;// 获取旋转矩阵 旋转中心 角度 缩放比例 1 M getRotationMatrix2D(Point(w / 2, h / 2), 45, 1.0);double cos abs(M.atdouble(0, 0));double sin abs(M.atdouble(0, 1));int nw cos * w sin * h;int nh sin * w cos * h;M.atdouble(0, 2) (nw / 2 - w / 2);M.atdouble(1, 2) (nh / 2 - h / 2);//warpAffine(image, dst, M, Size(w, h), INTER_LINEAR, 0, Scalar(255, 0, 0));warpAffine(image, dst, M, Size(nw, nh));namedWindow(旋转演示, WINDOW_AUTOSIZE);imshow(旋转演示, dst);
}