【OpenCV教程】Trackbar到底怎么用?
2024/8/15 21:02:48
本文主要是介绍【OpenCV教程】Trackbar到底怎么用?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
@TOC
1.createTrackbar创建滚动条
1.1 API
CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname, int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0);
- 参数如下
参数 | 含义 |
---|---|
trackbarname | 滚动条名字 |
winname(window name) | 窗体名字。要先用nameWindow创建好同名窗体,滚动条才会出现 |
value | 欲控制的变量的地址 |
count | 欲控制的变量的最大值(最小为0) |
onChange | 回调函数,默认为空。如果想要传入,那么其参数是固定的 |
userdata | 万能指针,默认为空。如果想要传入,通常用一个类的对象的地址。作为可使用的数据库,用来给回调函数提供变量支持 |
void onChange(int,void*);
2.getTrackbarPos获得滚动条当前的值
CV_EXPORTS_W int getTrackbarPos(const String& trackbarname, const String& winname);
- 参数如下
参数 | 含义 |
---|---|
trackbarname | 滚动条名字 |
winname(window name) | 窗体名字 |
3.使用方式一(recommended)
3.1 原理
不使用createTrackbar函数的参数value、onChange、userdata参数。通过while(1)的无限循环,在循环中不断地用getTrackbarPos函数动态地获取滚动条的值,然后在循环内部用这些值进行操作。
3.2 效果
Mat xuenai = imread("xuenai.jpg"); imshow("xuenai",xuenai); namedWindow("xuenai_rotate"); Mat xuenai_rotate(xuenai.size(), xuenai.type()); createTrackbar("angle","xuenai_rotate", nullptr,360); while (1) { int angle= getTrackbarPos("angle","xuenai_rotate"); Mat M = getRotationMatrix2D(Point2f(xuenai.cols / 2, xuenai.rows / 2), angle, 1); warpAffine(xuenai, xuenai_rotate, M, xuenai.size()); imshow("xuenai_rotate",xuenai_rotate); waitKey(20); }
4.使用方式二
4.1 原理
不使用getTrackbarPos函数,使用createTrackbar的全部参数,在onChange回调函数中完成所有操作,由于回调函数的参数表是固定的,因此**需要userdata传入所需数据。**在每次移动滚动条时,相当于调用了一次回调函数,就完成了操作。结尾没有waitKey(0)就显示不了多久。
4.2 效果
class TrackbarUserdata{ public: Mat input; Mat output; int angle=0; string winname; }; void RotateonChange(int,void *userdata) { TrackbarUserdata *data = (TrackbarUserdata *) userdata; int rows = data->input.rows; int cols = data->output.cols; Mat M = getRotationMatrix2D(Point2f(rows / 2, cols / 2), data->angle, 1); warpAffine(data->input,data->output,M,data->input.size()); imshow(data->winname,data->output); waitKey(10); } int main(){ Mat xuenai = imread("xuenai.jpg"); imshow("xuenai",xuenai); Mat xuenai_rotate(xuenai.size(), xuenai.type()); TrackbarUserdata userdata; userdata.input=xuenai; userdata.output=xuenai_rotate; userdata.winname="xuenai_rotate"; namedWindow(userdata.winname); createTrackbar("angle",userdata.winname, &userdata.angle,360, RotateonChange,&userdata); waitKey(); return 0; }
本文由博客一文多发平台 OpenWrite 发布!
这篇关于【OpenCV教程】Trackbar到底怎么用?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20获取apk的md5值有哪些方法?-icode9专业技术文章分享
- 2024-11-20xml报文没有传 IdentCode ,为什么正常解析没报错呢?-icode9专业技术文章分享
- 2024-11-20如何知道代码有没有进行 Schema 验证?-icode9专业技术文章分享
- 2024-11-20Mycat教程:新手快速入门指南
- 2024-11-20WebSocket入门:轻松掌握WebSocket基础
- 2024-11-19WebSocket入门指南:轻松搭建实时通信应用
- 2024-11-19Nacos安装资料详解:新手入门教程
- 2024-11-19Nacos安装资料:新手入门教程
- 2024-11-19升级 Gerrit 时有哪些注意事项?-icode9专业技术文章分享
- 2024-11-19pnpm是什么?-icode9专业技术文章分享