图像整体操作

1.图像整体变换
(1)图片读取保存
//imread(string filename, int flag)    读取位于filename处文件,flag设置读取参数,默认为1 ,将图像转换为3通道BGR彩色图像

//namedWindow(string name , int flag)  创建一个名为“name” 的窗口,flag默认为1,不允许用户修改窗口大小,根据图形大小显示

//imshow(string winname, InputArray mat)   在窗口winname上显示mat,若无这个窗口,会自动调用namedWindow创建窗口

//bool imwrite( const String& filename, InputArray img,
              //const std::vector<int>& params = std::vector<int>()) 三个参数,filename为存储位置与名字,img为保存名字,params设置保存属性

int main()
{
 
     Mat img;
     img = imread("D:/OpenCV/photo/1.jpg",1);  //读取图像
     vector<int> params;
     params.push_back(IMWRITE_AVIF_QUALITY);//设置imwrite第三个参数,保存为JPEG格式
     params.push_back(100);  //设置图像质量为100
     imwrite("D:/OpenCV/photo/2.jpg", img, params);
     imshow("SHOW", img);
     waitKey(0);    

    return 0;
}


(2)图像缩放
//CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
//                        Size dsize, double fx = 0, double fy = 0,
//                      int interpolation = INTER_LINEAR );
//scr:输入图像
//dst:输出图像
//dsize:输出大小
//fx,fy调整图像参数
//interpolation 插值方法标记

int main()
{
 
     Mat img;
     img = imread("D:/OpenCV/photo/1.jpg",1);
     vector<int> params;
     params.push_back(IMWRITE_AVIF_QUALITY);//设置imwrite第三个参数,保存为JPEG格式
     params.push_back(100);  //设置图像质量为100
     Mat dst;
     resize(img, dst, Size(img.cols*1.2,img.rows*1.2), 0, 0, 1);
     imshow("放大", dst);
     resize(img, dst, Size(img.cols * 0.5, img.rows * 0.5), 0, 0, 1);
     imshow("缩小", dst);


     imwrite("D:/OpenCV/photo/2.jpg", dst, params);
     imshow("img", img);
     waitKey(0);    

    return 0;
}

上述代码运行结果如下:
在这里插入图片描述

(3)翻转与旋转
//翻转
//void flip(InputArray src, OutputArray dst, int flipCode);
//   n为0  绕x轴进行旋转
//   n大于0   绕y轴进行旋转
//   n为小于0  绕两个轴旋转
int main()
{
 
     Mat img;
     img = imread("D:/OpenCV/photo/1.jpg",1);
	 imshow("原图", img);
	 Mat dst;
	 flip(img, dst, 0);
	 imshow("n为0", dst);
	 flip(img, dst, 1);
	 imshow("n大于0", dst);
	 flip(img, dst, -1);
	 imshow("n小于0", dst);
     waitKey(0);    

    return 0;
}

上述代码运行结果如下
在这里插入图片描述
在这里插入图片描述


// 旋转
// Mat getRotationMatrix2D(Point2f center, double angle, double scale)求旋转矩阵
// center : 旋转中心
// angle : 旋转角度
//scale: 缩放比例,不进行缩放则为1
//返回一个2*3的矩阵

//  void warpAffine( InputArray src, OutputArray dst,
 //                             InputArray M, Size dsize,
 //                             int flags = INTER_LINEAR,
 //                             int borderMode = BORDER_CONSTANT,
 //                             const Scalar& borderValue = Scalar());
//利用warpAffine仿射变换进行旋转
//dsize:输出图像大小
//borderValue: 填充边界的颜色,默认为黑色

int main()
{
 
     Mat img,M,dst;
     img = imread("D:/OpenCV/photo/1.jpg",1);
	 imshow("原图", img);
	 int w = img.cols;
	 int h = img.rows;
	 M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);
	 double sin = M.at<double>(0, 1);
	 double cos = M.at<double>(0, 0);

	 double nw = w * cos + h * sin;
	 double nh = sin * w + cos * h;    //计算旋转后的宽高
	 M.at<double>(0, 2) = M.at<double>(0, 2) + (nw / 2 - w / 2);
	 M.at<double>(1, 2) = M.at<double>(1, 2) + (nh / 2 - h / 2);//计算旋转后图像偏移

	 warpAffine(img, dst, M, Size(nw, nh), INTER_LINEAR, 0, Scalar(124, 123, 412));
	 imshow("旋转45度", dst);
	 waitKey(0);

    return 0;
}

	 warpAffine(img, dst, M, Size(nw, nh), INTER_LINEAR, 0, Scalar(124, 123, 412));
	 imshow("旋转45度", dst);
	 waitKey(0);

    return 0;
}

在这里插入图片描述

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值