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

关于网站开发的一些论文免费做微信链接的网站

关于网站开发的一些论文,免费做微信链接的网站,施工企业资质管理规定,都网站建设使用 C 和 OpenCV 实现滑动条控制图像旋转 本文将介绍如何使用 C 和 OpenCV 库创建一个简单的应用程序,该程序可以显示一张图片,并允许用户通过一个滑动条(Trackbar)来实时控制图片的旋转角度。这是一个非常实用的交互式功能&…

使用 C++ 和 OpenCV 实现滑动条控制图像旋转

本文将介绍如何使用 C++ 和 OpenCV 库创建一个简单的应用程序,该程序可以显示一张图片,并允许用户通过一个滑动条(Trackbar)来实时控制图片的旋转角度。这是一个非常实用的交互式功能,能帮助我们直观地理解仿射变换。

核心函数

在实现这个功能之前,我们主要会用到以下几个 OpenCV 的核心函数:

  1. namedWindow(): 创建一个可以容纳图像和滑动条的窗口。
  2. createTrackbar(): 在指定的窗口中创建一个滑动条。
  3. getRotationMatrix2D(): 计算二维旋转的仿射变换矩阵。它需要旋转中心、旋转角度和缩放比例作为参数。
  4. warpAffine(): 对图像应用一个仿射变换。我们将使用 getRotationMatrix2D() 生成的矩阵来旋转图像。

实现步骤

整个程序的逻辑非常清晰:

  1. 加载图像:从文件中读取一张图片。
  2. 创建窗口和滑动条:创建一个窗口来显示图像,并在这个窗口上附加一个范围为 0-360 度的滑动条。
  3. 定义回调函数:创建一个函数,该函数会在滑动条位置改变时被调用。
  4. 执行旋转:在回调函数中,获取滑动条的当前值(角度),计算旋转矩阵,并对原始图像应用旋转变换。
  5. 显示结果:在窗口中更新并显示旋转后的图像。

完整代码示例

下面是实现该功能的完整 C++ 代码。代码结构清晰,并附有详细注释。

#include <iostream>
#include "opencv2/opencv.hpp"using namespace std;
using namespace cv;// --- 全局变量 ---
// 窗口名称
const string g_windowName = "图像旋转 (拖动滑动条)"; 
// 原始图像和旋转后的图像
Mat g_srcImage, g_dstImage; 
// 滑动条当前值(角度)和最大值
int g_trackbarValue = 0; 
const int g_trackbarMaxValue = 360; /*** @brief 滑动条的回调函数* @param pos 滑动条的当前位置* @param userdata 用户传递的数据(这里未使用)*/
void onTrackbar(int pos, void* userdata) {// 1. 获取旋转中心:图像的几何中心Point2f center(g_srcImage.cols / 2.0F, g_srcImage.rows / 2.0F);// 2. 计算旋转矩阵// 参数:旋转中心、旋转角度 (pos)、缩放因子 (1.0)Mat rot = getRotationMatrix2D(center, pos, 1.0);// 3. 计算旋转后图像的边界框,以防止图像被裁切// 获取旋转后的边界框Rect bbox = RotatedRect(center, g_srcImage.size(), pos).boundingRect();// 调整旋转矩阵,加入平移变换,使得旋转后的图像能完整显示rot.at<double>(0, 2) += bbox.width / 2.0 - center.x;rot.at<double>(1, 2) += bbox.height / 2.0 - center.y;// 4. 应用仿射变换(旋转)// 参数:输入图像、输出图像、变换矩阵、输出图像尺寸warpAffine(g_srcImage, g_dstImage, rot, bbox.size());// 5. 显示旋转后的图像imshow(g_windowName, g_dstImage);
}int main(int argc, char** argv) {// 检查输入if (argc != 2) {cout << "用法: ./rotate_image <图片路径>" << endl;return -1;}// 1. 加载图像g_srcImage = imread(argv[1]);if (g_srcImage.empty()) {cout << "无法加载图像: " << argv[1] << endl;return -1;}// 2. 创建窗口namedWindow(g_windowName, WINDOW_AUTOSIZE);// 3. 创建滑动条// 参数:滑动条名称、窗口名称、绑定变量指针、最大值、回调函数createTrackbar("角度", g_windowName, &g_trackbarValue, g_trackbarMaxValue, onTrackbar);// 4. 首次调用回调函数以显示初始图像(0度)onTrackbar(0, 0);// 5. 等待用户按键后退出cout << "拖动滑动条来旋转图像。按任意键退出..." << endl;waitKey(0);return 0;
}

代码解析
  • 全局变量: 我们将需要被回调函数 onTrackbar 访问的变量(如源图像 g_srcImage)定义为全局变量,这是一种在回调场景中共享状态的简单方法。
  • 防止裁切: 如果直接使用 warpAffine,旋转后的图像可能会超出原始图像的边界而被裁切。为了解决这个问题,我们首先计算旋转后图像的边界框(Bounding Box),然后调整旋转矩阵,增加一个平移量,确保整个旋转后的图像都能在新尺寸的画布中完整显示出来。
  • 回调机制: createTrackbar 是核心。它将一个滑动条与一个整数变量 g_trackbarValue 和一个回调函数 onTrackbar 关联起来。每当用户拖动滑动条时,OpenCV 会自动更新 g_trackbarValue 的值,并用新值作为参数调用 onTrackbar 函数,从而触发图像的重新计算和显示。
如何编译和运行
  1. 保存代码:将以上代码保存为 rotate_image.cpp

  2. 编译:打开终端,使用 g++ 编译器(需要已配置好 OpenCV 环境)进行编译。

    g++ rotate_image.cpp -o rotate_image `pkg-config --cflags --libs opencv4`
    

    注意:如果您的 OpenCV 版本是 3.x,请将 opencv4 替换为 opencv

  3. 运行:准备一张图片(例如 test.jpg),然后执行程序。

    ./rotate_image test.jpg
    

程序运行后,你会看到一个窗口,窗口上方有一个滑动条。拖动它,图片就会以其中心为轴进行实时旋转!


文章转载自:

http://XPnVutU5.ykrkb.cn
http://dNiAhUyv.ykrkb.cn
http://DUIxJPsh.ykrkb.cn
http://p8dX5esC.ykrkb.cn
http://WqzlbJKO.ykrkb.cn
http://PDc5CZAi.ykrkb.cn
http://UM6Y2F5g.ykrkb.cn
http://MWiQtFk7.ykrkb.cn
http://xl1RiRuJ.ykrkb.cn
http://haF2V7WO.ykrkb.cn
http://PQGLoPX4.ykrkb.cn
http://e3yWyGQz.ykrkb.cn
http://MMhQ9kbR.ykrkb.cn
http://hIINuWGJ.ykrkb.cn
http://WjlvQJj3.ykrkb.cn
http://V1CaAzyz.ykrkb.cn
http://zyjO7fiY.ykrkb.cn
http://PRqsu4cg.ykrkb.cn
http://zExBuwr0.ykrkb.cn
http://DkdUs9e4.ykrkb.cn
http://7tY7pT5d.ykrkb.cn
http://8CyTX6Tz.ykrkb.cn
http://JJzUMy7u.ykrkb.cn
http://kTNy1LUA.ykrkb.cn
http://zu741H7J.ykrkb.cn
http://BBH9SMv8.ykrkb.cn
http://zpC0a6xd.ykrkb.cn
http://TLumGLwn.ykrkb.cn
http://6NhgYYvF.ykrkb.cn
http://86UQZeUo.ykrkb.cn
http://www.dtcms.com/wzjs/622952.html

相关文章:

  • 建设网站和备案设置字体颜色的网站
  • 网站开发最强工具活动策划案怎么写
  • 电子网站建设ppt模板佛山百度推广公司
  • asp响应式h5网站源码wordpress如何接入h5
  • 网站建设 专项资金变更找企业名录的网站
  • 山东机关建设网站各大城市网站哪里做
  • 大学生做家教网站wordpress博客地址
  • 东莞专业的网站制作有哪些公众号开发 表格
  • 东营网站建设推广哪家好今天怀化市感染名单
  • 成都 网站建设 app 开发oa系统全称
  • 文学网站模板app制作培训班
  • 微信投票网站制作自动做reference的网站
  • 用mcu做灯光效果网站民宿行业网站建设方案
  • 怎样做网站上更改文字没有备案的网站百度不收录
  • 怎么创办一个网站优秀网站设计书籍
  • 西安做网站公司ps做的网站怎样在dw里打开
  • 即商通网站建设推广搜索引擎网站分析
  • 个人网站的设计流程wordpress500
  • 安徽住房和城乡建设厅网站首页服装行业网站开发
  • 移动网上营业厅官网北京seo优化哪家公司好
  • 设计网站排行榜前十名某男神去年年底来某网站做见面会_竟要求安保人数超过两位数
  • 简单的网站设计多少钱新零售六大模式
  • 广州建站外贸网站360搜索网址是多少
  • 建立一个虚拟公司的网站大连网站开发企业
  • 如何在中国建设银行网站转账东莞做网站那家好
  • 多网站建设嘉兴在线 官网
  • 关键词的选取原则有seo优化培训
  • 网站怎么做移动图片不显示大连在哪个省市
  • 永康公司网站建设用vps建网站备案
  • 开发网站的空间分录WordPress门户系统