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

建立购物网站网页设计尺寸规范及标准详解

建立购物网站,网页设计尺寸规范及标准详解,分类信息的网站排名怎么做,伽师网站建设实验原理 在OpenCV中#xff0c;图像旋转也是一种常见的几何变换#xff0c;它可以用来调整图像的方向。图像旋转通常涉及绕着图像中心点旋转一定角度的操作。与图像平移类似#xff0c;旋转也可以通过仿射变换来实现#xff0c;但是旋转需要使用到旋转矩阵来定义旋转的角… 实验原理 在OpenCV中图像旋转也是一种常见的几何变换它可以用来调整图像的方向。图像旋转通常涉及绕着图像中心点旋转一定角度的操作。与图像平移类似旋转也可以通过仿射变换来实现但是旋转需要使用到旋转矩阵来定义旋转的角度和旋转中心。 图像旋转的原理 图像旋转通常需要两步完成 1. 构建旋转矩阵 根据旋转中心点和旋转角度构建一个2x3的仿射变换矩阵。 为了旋转图像你需要创建一个旋转矩阵该矩阵描述了旋转的角度和旋转中心。在OpenCV中旋转矩阵是一个2x3的矩阵可以使用 cv::getRotationMatrix2D 函数来创建。该函数接收三个参数旋转中心、旋转角度和缩放因子。 2. 应用旋转变换 使用cv::warpAffine函数将这个矩阵应用于图像。这与平移操作非常相似只是使用的变换矩阵不同。 函数原型 cv::getRotationMatrix2D 是 OpenCV 库中的一个函数用于构建一个 2x3 的仿射变换矩阵该矩阵可以用于绕给定点通常是图像的中心点旋转图像。此函数非常适合于实现图像的旋转操作。 cv::Mat getRotationMatrix2D(Point2f center, // 旋转中心点double angle, // 旋转角度顺时针为负逆时针为正double scale // 缩放因子默认为1无缩放 );参数说明 center: cv::Point2f 类型指定了旋转的中心点。通常设置为图像的中心点 (width / 2.0, height / 2.0)。 angle: double 类型指定了旋转的角度单位是度。正值表示逆时针旋转负值表示顺时针旋转。 scale: double 类型指定了旋转后的图像相对于原图像的缩放比例。默认值为 1.0表示不进行缩放。如果设置为小于 1 的值则图像会缩小如果设置为大于 1 的值则图像会放大。 如何使用 使用 cv::getRotationMatrix2D 获取到旋转矩阵之后你可以通过 cv::warpAffine 函数将该矩阵应用于图像从而实现图像的旋转。 示例代码1 下面是一个详细的示例代码展示了如何使用 cv::getRotationMatrix2D 和 cv::warpAffine 来旋转图像 #include pch.h #include opencv2/opencv.hpp #include iostreamint main() {// 加载图像cv::Mat img cv::imread(D1.png);if (img.empty()){std::cout Error: Image not found. std::endl;return -1;}// 获取图像的尺寸int width img.cols;int height img.rows;// 定义旋转中心点图像中心cv::Point2f center(width / 2.0, height / 2.0);// 定义旋转角度和缩放因子double angle 60; // 旋转60度double scale 1.0; // 不缩放// 创建旋转矩阵cv::Mat rotationMatrix cv::getRotationMatrix2D(center, angle, scale);// 计算旋转后的图像大小可选如果需要保持原图大小可以省略cv::Size dsize cv::Size(img.cols, img.rows);// 应用旋转变换cv::Mat rotatedImg;cv::warpAffine(img, rotatedImg, rotationMatrix, dsize);// 显示原图和旋转后的图像cv::namedWindow(Original Image, cv::WINDOW_NORMAL);cv::imshow(Original Image, img);cv::namedWindow(Rotated Image, cv::WINDOW_NORMAL);cv::imshow(Rotated Image, rotatedImg);cv::waitKey(0);return 0; }在这个示例中我们首先加载了一张图像并计算了图像的中心点。接着我们定义了旋转的角度60度和缩放因子1.0。使用 cv::getRotationMatrix2D 构建了旋转矩阵并将其应用于图像最终得到了旋转后的图像。请注意旋转可能会导致图像的一部分超出边界此时可以调整 dsize 或者使用不同的 borderMode 来处理边界情况。 运行结果1 总结 图像旋转是通过仿射变换来实现的它涉及到将图像绕着一个点旋转一定角度。在OpenCV中可以通过cv::getRotationMatrix2D 构建一个2x3的仿射变换矩阵并使用cv::warpAffine函数来实现图像的旋转。通过调整旋转角度和旋转中心点可以控制图像的旋转效果。此外还可以通过指定不同的边界处理方式来处理旋转后超出原图像范围的情况。 示例代码2 示例代码下面是一个使用OpenCV和C实现图像旋转的示例代码 #include pch.h #include opencv2/opencv.hpp #include iostreamint main(int argc, char** argv) {// 读取图像cv::Mat src cv::imread(D3.png, cv::IMREAD_COLOR);if (src.empty()){std::cout Error opening image std::endl;return -1;}// 创建输出图像cv::Mat dst;// 定义旋转参数double angleInDegrees 45; // 旋转角度度cv::Point center(src.cols / 2.0, src.rows / 2.0); // 旋转中心点// 计算旋转矩阵double angleInRadians angleInDegrees * (CV_PI / 180.0); // 将角度转换为弧度double cosTheta std::cos(angleInRadians);double sinTheta std::sin(angleInRadians);cv::Mat rotationMatrix (cv::Mat_double(2, 3) cosTheta, -sinTheta, 0,sinTheta, cosTheta, 0);// 更新平移部分rotationMatrix.atdouble(0, 2) center.x - (center.x * cosTheta - center.y * sinTheta);rotationMatrix.atdouble(1, 2) center.y - (center.x * sinTheta center.y * cosTheta);// 应用仿射变换cv::warpAffine(src, dst, rotationMatrix, src.size());// 显示结果cv::namedWindow(Original Image, cv::WINDOW_NORMAL);cv::imshow(Original Image, src);cv::namedWindow(Rotated Image, cv::WINDOW_NORMAL);cv::imshow(Rotated Image, dst);cv::waitKey(0);return 0; }代码解释 1. 读取图像使用cv::imread读取输入图像并确保它是彩色图像。 2. 创建输出图像创建一个新的cv::Mat对象来存储旋转后的结果。 3. 定义旋转参数定义旋转的角度和旋转中心点。 4. 计算旋转矩阵根据旋转角度和旋转中心点计算旋转矩阵。首先将角度转换为弧度然后根据旋转矩阵的定义构建矩阵。 5. 更新平移部分为了使图像绕着旋转中心点旋转需要更新旋转矩阵中的平移部分。 6. 应用仿射变换使用cv::warpAffine函数对图像进行旋转变换。 7. 显示结果使用cv::imshow函数显示原始图像和旋转后的图像并等待用户按键退出。 运行结果2 示例代码3 7.3函数实现图像旋转 // test.cpp : 此文件包含 main 函数。程序执行将在此处开始并结束。 //#include pch.h #include opencv2/opencv.hpp #include iostreamusing namespace cv; //#pragma comment(lib, opencv_world450d.lib) //引用引入库 // 图像旋转 void Rotate(const Mat srcImage, Mat destImage, double angle)//angle表示要旋转的角度 {Point2f center(srcImage.cols / 2, srcImage.rows / 2);//中心Mat M getRotationMatrix2D(center, angle, 1);//计算旋转的仿射变换矩阵 warpAffine(srcImage, destImage, M, Size(srcImage.cols, srcImage.rows));//仿射变换 circle(destImage, center, 2, Scalar(255, 0, 0)); }int main() {//读入图像并判断图像是否读入正确cv::Mat srcImage imread(02.jpeg);if (!srcImage.data){puts(打开图像文件失败);return -1;}namedWindow(原图, WINDOW_NORMAL);imshow(原图, srcImage);//将图片按比例缩放至宽为250像素的大小Mat destImage;double angle 9.9;//角度Rotate(srcImage, destImage, angle);namedWindow(旋转图, WINDOW_NORMAL);imshow(旋转图, destImage);waitKey(0);return 0; } 运行结果3 示例代码4 7.2手工实现旋转 // test.cpp : 此文件包含 main 函数。程序执行将在此处开始并结束。 //#include pch.h #include iostream#include opencv2/core/core.hpp #include opencv2/imgproc/imgproc.hpp #include opencv2/highgui/highgui.hpp #include iostream #include string #include cmathusing namespace cv;//#pragma comment(lib, opencv_world450d.lib) //引用引入库 Mat imgRotate(Mat matSrc, float angle, bool direction) {float theta angle * CV_PI / 180.0;int nRowsSrc matSrc.rows;int nColsSrc matSrc.cols;// 如果是顺时针旋转if (!direction)theta 2 * CV_PI - theta;// 全部以逆时针旋转来计算// 逆时针旋转矩阵float matRotate[3][3]{{std::cos(theta), -std::sin(theta), 0},{std::sin(theta), std::cos(theta), 0 },{0, 0, 1}};float pt[3][2]{{ 0, nRowsSrc },{nColsSrc, nRowsSrc},{nColsSrc, 0}};for (int i 0; i 3; i){float x pt[i][0] * matRotate[0][0] pt[i][1] * matRotate[1][0];float y pt[i][0] * matRotate[0][1] pt[i][1] * matRotate[1][1];pt[i][0] x;pt[i][1] y;}// 计算出旋转后图像的极值点和尺寸float fMin_x min(min(min(pt[0][0], pt[1][0]), pt[2][0]), (float)0.0);float fMin_y min(min(min(pt[0][1], pt[1][1]), pt[2][1]), (float)0.0);float fMax_x max(max(max(pt[0][0], pt[1][0]), pt[2][0]), (float)0.0);float fMax_y max(max(max(pt[0][1], pt[1][1]), pt[2][1]), (float)0.0);int nRows cvRound(fMax_y - fMin_y 0.5) 1;int nCols cvRound(fMax_x - fMin_x 0.5) 1;int nMin_x cvRound(fMin_x 0.5);int nMin_y cvRound(fMin_y 0.5);// 拷贝输出图像Mat matRet(nRows, nCols, matSrc.type(), Scalar(0));for (int j 0; j nRows; j){for (int i 0; i nCols; i){// 计算出输出图像在原图像中的对应点的坐标然后复制该坐标的灰度值// 因为是逆时针转换所以这里映射到原图像的时候可以看成是输出图像// 到顺时针旋转到原图像的而顺时针旋转矩阵刚好是逆时针旋转矩阵的转置// 同时还要考虑到要把旋转后的图像的左上角移动到坐标原点。int x (i nMin_x) * matRotate[0][0] (j nMin_y) * matRotate[0][1];int y (i nMin_x) * matRotate[1][0] (j nMin_y) * matRotate[1][1];if (x 0 x nColsSrc y 0 y nRowsSrc){matRet.atVec3b(j, i) matSrc.atVec3b(y, x);}}}return matRet; }int main(){Mat matSrc imread(2.jpeg);if (matSrc.empty())return 1;float angle 30;Mat matRet imgRotate(matSrc, angle, true);namedWindow(原图, WINDOW_NORMAL);imshow(原图, matSrc);namedWindow(旋转图, WINDOW_NORMAL);imshow(旋转图, matRet);// 保存图像imwrite(rotate.jpg, matRet);waitKey();return 0;} 手工实现旋转
http://www.dnsts.com.cn/news/214822.html

相关文章:

  • 好网站推理免费建自己的网站赚钱
  • 网站icp备案证明文件网站建设需要学编程么
  • 做网站和小程序的区别南开建设网站
  • 大气门户网站企业网站建设实训
  • 中山 网站建设app发布流程
  • 免费建立企业网站深圳做网站980
  • 德尔普的网站建设的价格广州排前三的seo公司
  • 物流网站建设 市场分析做爰全过程免费网站可以看
  • 网站群项目建设实施进度计划阳江百姓网
  • 网站建设选择题百度搜索网站提交
  • 网站建设花都小程序商店
  • 兼职做网站编辑网站相对路径 .
  • 邯郸医院网站建设水禾田网站建设公司
  • 网站怎么做下载连接手机端网站建设的注意事项
  • 织梦手机网站模板做百度推广销售怎么样
  • 网站设计维护内容电商网页设计的主要内容
  • 做房产经纪人要自己花钱开网站吗专业彩票网站建设
  • 罗湖附近公司做网站建设哪家效益快使用angularjs的网站
  • 石家庄网站建设外包公司哪家好wordpress自定义字段数据库
  • 百度网站禁止访问怎么解除网页美工设计说明
  • 上饶网站建设多少钱做网站的女生多么
  • 商城网站建设的优势建设银行龙卡信用卡官方网站
  • 免费seo网站自动推广c语言建设网站
  • 备案成功后怎么建设网站包头网站建设制作
  • 购物网站开发需要什么技术什么是网络营销视频
  • 淘宝客网站api买了域名怎么做网站
  • 那里有制作网站企业房地产店铺首页设计过程
  • 宁德网站建设51yunsou什么是网络营网络营销的特点
  • 大学招生网站建设用来做收录的网站
  • 自己怎样免费建网站天猫购买