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

深圳网站制作的公司排名电商网站平台

深圳网站制作的公司排名,电商网站平台,专做农产品跨境的网站有,动态网站演示仿射变换cv::warpAffine cv::warpAffine 是OpenCV中用于执行仿射变换的函数。仿射变换是一种线性变换,可用于执行平移、旋转、缩放和剪切等操作。下面是 cv::warpAffine 函数的基本用法: cv::warpAffine(src, dst, M, dsize, flags, borderMode, borde…

仿射变换cv::warpAffine

cv::warpAffine 是OpenCV中用于执行仿射变换的函数。仿射变换是一种线性变换,可用于执行平移、旋转、缩放和剪切等操作。下面是 cv::warpAffine 函数的基本用法:

cv::warpAffine(src, dst, M, dsize, flags, borderMode, borderValue);
  • src: 输入图像。
  • dst: 输出图像,用于存储仿射变换后的结果。
  • M: 2x3仿射变换矩阵,包含变换的参数。
  • dsize: 输出图像的尺寸。
  • flags: 插值方法,通常使用
    • cv::INTER_LINEAR 进行双线性插值。
    • cv::INTER_NEAREST 最近邻插值
    • cv::INTER_AREA 区域插值
    • cv::INTER_CUBIC 三次样条插值
    • cv::INTER_LANCZOS4 Lanczos插值
    • cv::CV_WARP_FILL_OUTLIERS 填充所有输出图像的象素。如果部分象素落在输入图像的边界 外,那么它们的值设定为 fillval
    • cv::CV_WARP_INVERSE_MAP 表示 M为输出图像到输入图像的反变换。因此可以直接用来做 象素插值。否则,warpAffine函数从M矩阵得到反变换
  • borderMode: 边界模式,可选参数,定义当像素越出图像边界时的处理方式,通常使用 cv::BORDER_CONSTANTcv::BORDER_REPLICATE
  • borderValue: 当 borderModecv::BORDER_CONSTANT 时使用,用于指定图像边界外的像素值。

通过提供仿射变换矩阵 M,您可以指定图像的变换方式,包括平移、旋转、缩放和剪切等。然后,cv::warpAffine 函数会根据给定的变换参数将输入图像进行变换,输出结果保存在 dst 中。

以下是一个简单的示例,演示如何使用 cv::warpAffine 进行图像的平移操作:

#include <opencv2/opencv.hpp>int main() {cv::Mat image = cv::imread("1.jpg", cv::IMREAD_COLOR);if (image.empty()) {std::cerr << "无法加载图像" << std::endl;return -1;}// 定义仿射变换矩阵(平移操作)cv::Mat warpMatrix = (cv::Mat_<double>(2, 3) << 1, 0, 50, 0, 1, 30);cv::Mat result;// 应用仿射变换cv::warpAffine(image, result, warpMatrix, image.size());cv::imshow("原始图像", image);cv::imshow("仿射变换后的图像", result);cv::waitKey(0);return 0;
}

在这个示例中,我们定义了一个仿射变换矩阵 warpMatrix,该矩阵包含平移操作的参数。然后,我们使用 cv::warpAffine 函数将变换应用于原始图像,生成了变换后的结果。您可以根据需要修改 warpMatrix 中的值以实现不同的仿射变换效果。
在这里插入图片描述

二维旋转变换矩阵的函数:cv::getRotationMatrix2D

cv::getRotationMatrix2D 是OpenCV中用于获取二维旋转变换矩阵的函数。这个函数用于构造一个仿射变换矩阵,该矩阵用于执行二维图像的旋转操作。下面是 cv::getRotationMatrix2D 函数的基本用法:

cv::Mat cv::getRotationMatrix2D(cv::Point2f center, double angle, double scale);
  • center: 旋转中心的坐标,通常是旋转图像的中心点。
  • angle: 旋转的角度(以度为单位)。
  • scale: 缩放因子,通常设置为1.0。

函数返回一个2x3的仿射变换矩阵,该矩阵包含了旋转和缩放的参数。

以下是一个示例,演示如何使用 cv::getRotationMatrix2D 函数构造旋转变换矩阵,然后应用该变换矩阵来旋转图像:

#include <opencv2/opencv.hpp>int main() {cv::Mat image = cv::imread("1.jpg", cv::IMREAD_COLOR);if (image.empty()) {std::cerr << "无法加载图像" << std::endl;return -1;}// 旋转中心坐标cv::Point2f center(image.cols / 2.0, image.rows / 2.0);// 旋转角度(以度为单位)double angle = 30;// 缩放因子double scale = 1.0;// 获取旋转变换矩阵cv::Mat rotationMatrix = cv::getRotationMatrix2D(center, angle, scale);cv::Mat result;// 应用仿射变换cv::warpAffine(image, result, rotationMatrix, image.size());cv::imshow("原始图像", image);cv::imshow("旋转后的图像", result);cv::waitKey(0);return 0;
}

在这个示例中,我们使用 cv::getRotationMatrix2D 函数获取旋转变换矩阵,然后将该变换矩阵应用于原始图像,以实现旋转效果。您可以根据需要调整 centeranglescale 参数来执行不同的旋转和缩放操作。

在这里插入图片描述

综合案例

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace std;
using namespace cv;
#include <iostream>
#include <fstream>
using namespace cv; //包含cv命名空间
#include <opencv2/core/core.hpp>
#define WINDOW_NAME1 " 【原始图窗口】 " //为窗口标题定义的宏
#define WINDOW_NAME2 " 【经过 Warp后的图像】 " //为窗口标题定义的宏
#define WINDOW_NAME3 " 【经过 Warp和 Rotate后的图像】 " //为窗口标题定
static void ShowHelpText();
/// 【main()函数】-------------------------- -
// 描述: 控制台应用程序的入口函数, 我们的程序从这里开始执行
int main()
{//【0】改变 console字体颜色system("color 1A");//【0】显示欢迎和帮助文字ShowHelpText();//【1】参数准备//定义两组点, 代表两个三角形Point2f srcTriangle[3];Point2f dstTriangle[3];//定义一些 Mat变量Mat rotMat(2, 3, CV_32FC1);Mat warpMat(2, 3, CV_32FC1);Mat srcImage, dstImage_warp, dstImage_warp_rotate;//【2】加载源图像并作一些初始化srcImage = imread("1.jpg", 1);if (!srcImage.data) { printf("读取图片错误, 请确定目录下是否有imread函数指定的图片存在~! \n"); return false; }// 设置目标图像的大小和类型与源图像一致dstImage_warp = Mat::zeros(srcImage.rows, srcImage.cols, srcImage.type());//【3】设置源图像和目标图像上的三组点以计算仿射变换srcTriangle[0] = Point2f(0, 0);srcTriangle[1] = Point2f(static_cast<float>(srcImage.cols - 1), 0);srcTriangle[2] = Point2f(0, static_cast<float>(srcImage.rows - 1));dstTriangle[0] = Point2f(static_cast<float>(srcImage.cols * 0.0), static_cast<float>(srcImage.rows * 0.33));dstTriangle[1] = Point2f(static_cast<float>(srcImage.cols * 0.65), static_cast<float>(srcImage.rows * 0.35));dstTriangle[2] = Point2f(static_cast<float>(srcImage.cols * 0.15), static_cast<float>(srcImage.rows * 0.6));//【4】求得仿射变换warpMat = getAffineTransform(srcTriangle, dstTriangle);//【5】对源图像应用刚刚求得的仿射变换warpAffine(srcImage, dstImage_warp, warpMat, dstImage_warp.size());//【6】对图像进行缩放后再旋转// 计算绕图像中点顺时针旋转50度缩放因子为0.6的旋转矩阵Point center = Point(dstImage_warp.cols / 2, dstImage_warp.rows / 2);double angle = -30.0;double scale = 0.8;// 通过上面的旋转细节信息求得旋转矩阵rotMat = getRotationMatrix2D(center, angle, scale);// 旋转已缩放后的图像warpAffine(dstImage_warp, dstImage_warp_rotate, rotMat, dstImage_warp.size());//【7】显示结果imshow(WINDOW_NAME1, srcImage);imshow(WINDOW_NAME2, dstImage_warp);imshow(WINDOW_NAME3, dstImage_warp_rotate);// 等待用户按任意按键退出程序waitKey(0);return 0;
}
//一 【ShowHelpText()函数】---------------------- -
// 描述: 输出一些帮助信息
static void ShowHelpText()
{//输出一些帮助信息printf("\n\n\n\t欢迎来到【仿射变换】示例程序~ \n\n");//printf("\t当前使用的OpenCV版本为 OpenCV "CV_VERSION); 
}

在这里插入图片描述

http://www.mmbaike.com/news/29214.html

相关文章:

  • 备案服务网站saascrm国内免费pdf
  • 做美食软件的视频网站建立一个国外的网站
  • 网站建设案例价位浙江百度推广开户
  • b站怎么看视频在线人数湖北网站seo策划
  • 外网视频网站做泥声控怎么推广网页
  • 商城网站制作网站武汉大学人民医院精神卫生中心
  • 昆明网站建设咨询新站整站优化
  • 多用户商城网站方案微博营销的特点
  • 音乐培训如何做网站宣传百度推广助手
  • 网站设计的能力要求如何制定会员营销方案
  • 浙江综合网站建设配件上google必须翻墙吗
  • 做网站至少多少钱企业网站制作方案
  • 四川网站备案百度搜索指数的数据来源
  • 做网站推广广告百度搜索官方网站
  • 浅谈电子商务网站的建设与管理南宁seo公司
  • 湖州做网站公司哪家好18种最有效推广的方式
  • wordpress 多站点设置班级优化大师
  • 陕西手机网站建设公司排名网络营销推广的手段
  • 百度网站推广网络手机百度电脑版入口
  • 做网站的目的是啥企业培训课程价格
  • 网站建设与单位干部作风的关系提供seo顾问服务适合的对象是
  • 手机建网站优帮云seo排名点击 seo查询
  • 网站管理助手建站百度北京总部电话
  • 做调查的网站知乎长沙网站seo诊断
  • 网站数据库连接失败班级优化大师怎么加入班级
  • 银川公司做网站在线一键生成网页
  • 怎么形容网站做的很好百度官网网页版
  • 社保网站做员工用工备案吗网站seo站长工具
  • 一个专门做海鲜的网站永久域名查询
  • 不是做有网站都叫jwth免费入驻的跨境电商平台