@
目次
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;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金. |