当前位置: 首页 > news >正文

OpenCV中图像变换

一、介绍

    transform():Transposes a matrix.

    perspectiveTransform():Performs the perspective matrix transformation of vectors.

    warpAffine():Applies an affine transformation to an image.

    warpPerspective():Applies a perspective transformation to an image.

二、transform

	Mat m23 = Mat::zeros(2, 3, CV_32FC1);  // 2*2  2*3m23.at<float>(0, 0) = 1.0;m23.at<float>(0, 2) = 2.0;m23.at<float>(1, 1) = 3.0;m23.at<float>(1, 2) = 4.0;cout << "m23 = " << endl << m23 << endl;// src.channel = m.cols 或 m.cols - 1// 当src.channel=m.cols - 1时,src增加一通道,值为1Mat src = Mat::zeros(4, 4, CV_8UC3);for (int i = 0; i < src.rows; i++){for (int j = 0; j < src.cols; j++){for (int k = 0; k < src.channels(); k++){src.at<Vec3b>(i, j)[k] = 2 * i + j + k;}}}cout << "src = " << endl << src << endl;Mat dst;cv::transform(src, dst, m23);  // dst.channel = m.rowscout << "dst = " << endl << dst << endl;

三、perspectiveTransform

	Mat m33 = Mat::zeros(3, 3, CV_32FC1);  // 3*3  4*4m33.at<float>(0, 0) = 1.0;m33.at<float>(0, 2) = 2.0;m33.at<float>(1, 1) = 3.0;m33.at<float>(1, 2) = 4.0;m33.at<float>(2, 2) = 2.0;cout << "m33 = " << endl << m33 << endl;// src.channel = m.cols - 1   src增加一个通道,值为1Mat src = Mat::zeros(2, 2, CV_32FC2);for (int i = 0; i < src.rows; i++){for (int j = 0; j < src.cols; j++){for (int k = 0; k < src.channels(); k++){src.at<Vec2f>(i, j)[k] = 2.0f * i + j + k;}}}cout << "src = " << endl << src << endl;// dst.size = src.size   dst.channels = src.channels// 3*3 * 3*1 = 3*1   4*4 * 4*1 = 4*1    m * v1 = v2// m33 * [x,y,1] = [x',y',w], 使用[x'/w, y'/w]作为dst的结果Mat dst;cv::perspectiveTransform(src, dst, m33);cout << "dst = " << endl << dst << endl;

四、warpAffine

	// 仿射变换矩阵 M 2*3 --- 旋转、平移、缩放cv::Point2f center = Point2f(img.cols / 2.0f, img.rows / 2.0f);  // 旋转中心double angle = 10.0;  // 旋转角度,逆时针为正double scale = 1.2;   // 缩放尺寸Mat M = cv::getRotationMatrix2D(center, angle, scale);int bound_w = (img.rows * fabs(sin(angle * CV_PI / 180)) + img.cols * fabs(cos(angle * CV_PI / 180))) * scale;int bound_h = (img.rows * fabs(cos(angle * CV_PI / 180)) + img.cols * fabs(sin(angle * CV_PI / 180))) * scale;M.at<double>(0, 2) += (bound_w - img.cols) / 2.0;  // x平移M.at<double>(1, 2) += (bound_h - img.rows) / 2.0;  // y平移Mat dst;cv::warpAffine(img, dst, M, cv::Size(bound_w, bound_h));

 

 

五、warpPerspective

	// 透视变换矩阵 M 3*3 --- 投影Point2f ptsF[4], ptsT[4];ptsF[0] = Point2f(163, 191);ptsF[1] = Point2f(735, 160);ptsF[2] = Point2f(872, 936);ptsF[3] = Point2f(112, 980);ptsT[0] = Point2f(163, 191);ptsT[1] = Point2f(735, 191);ptsT[2] = Point2f(735, 936);ptsT[3] = Point2f(163, 936);Mat M = cv::getPerspectiveTransform(ptsF, ptsT);Mat dst;cv::warpPerspective(img, dst, M, img.size());

 

 

http://www.lryc.cn/news/108271.html

相关文章:

  • wordpress发表文章时报错: rest_cannot_create,抱歉,您不能为此用户创建文章(已解决)
  • 数学建模学习(7):Matlab绘图
  • CSS中所有选择器详解
  • STM32 低功耗学习
  • HCIP--云计算题库 V5.0版本
  • 小白到运维工程师自学之路 第六十五集 (docker-compose)
  • 量子机器学习
  • WEB集群——tomcat
  • Vulnhub: blogger:1靶机
  • 老版MFC工程迁移到VC2019编译EXE太大的问题
  • Curve深陷安全事件,OKLink如何破局
  • 2023华数杯数学建模思路A题B题C题模型代码分析
  • el-table合并单元格
  • html5设置不缓存
  • kotlin 的函数参数
  • 谈谈 Kafka 的幂等性 Producer
  • Doris(三)-集群部署3个FE+3个BE
  • js沙箱逃逸
  • 振弦传感器信号转换器应用山体滑坡安全监测
  • Moonbeam新增强大的互操作性功能至波卡生态
  • 考研408 | 【计算机网络】概述
  • 一道名题-(csp 儒略日)的心得与技巧
  • 单元测试之- mock工具mockito
  • 03 线程间共享数据
  • 题目:2264.找到一个数字的 K 美丽度
  • 分布式ID性能评测:CosId VS 美团 Leaf
  • MySQL数据库安装(二)
  • 通过MySQL删除Hive元数据信息
  • 在电脑如何翻译文件名称并同时保存原文件名和新文件名称
  • Modbus协议简介与常用测试指令说明