210322阶段三QT事件循环及opencv图像处理

本文详细介绍了QT事件循环机制,包括事件的产生、处理流程和QObject的角色。同时,讲解了OpenCV中如何进行图像处理,如灰度图、二值图转换,以及腐蚀、膨胀和降噪操作,有助于深入理解这两个库的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、学习的知识点

1.QT事件循环机制

1.1QT是事件驱动的。QT将系统产生的信号(软件中断)转换成QT事件,并且将事件封装成类,所有的事件类都是QEvent派生的,事件的产生和处理就是QT程序的主轴,伴随着整个程序的运行周期。

1.2QT事件由QObject接收,QObject是所有QT类的基类,是QT对象模型的核心。QObject类的三大核心功能之一就是 事件处理。QObject通过event函数调用获取事件,通过继承QObject并重定义event函数实现自定义事件的处理

1.3QT事件处理的流程:事件有别于信号的重要一点,事件是一个类对象具有特定的类型,事件多数情况被分发到一个队列(事件队列)中,队列有时间就不停的将队列中断时间发送给QObject对象,队列为空时就阻塞地等待事件。

1.4调用show函数只是发生了一个事件,这个事件放在队列中,要等程序空闲才能真正显示,或者使用qApp->processevents(),可以立即处理队列中的事件。

2.Opencv图像处理

2.1Mat格式的图片转为灰度图: Mat img,img_new; cvtColor(img,img_new,CV_BGR2GRAY);

2.2灰度图转二值图:threshold(img,img_new,70.0,150.0,THRESH_BINARY); THRESH_BINARY是选择转化的算法,灰度大于参数三时,取值参数四,否则取值0,实现二值化

2.3二值图的腐蚀,扩大黑色部分,使轮廓更平滑,Mat img_erode; Mat elem=getStructuringElement(MORPH_RECT,Size(10,10),Point(-1,-1)); //设置腐蚀参数erode(img_th,img_erode,elem); //腐蚀

2.4 降噪:medianBlur(img_erode,img_erode,3); //第三参数需要为 奇数

2.5 膨胀,扩大白色部分,Mat img_dilate;Mat dilate2=getStructuringElement(MORPH_RECT,Size(5,5));dilate(img_erode,img_dilate,dilate2);

2.6画轮廓

vector< vector<Point> > contours; //存放轮廓数据 原始数据 存在噪点一个轮廓要用到一个vector

//CV_RETR_EXTERNAL 检测外围轮廓CV_CHAIN_APPROX_SIMPLE 把轮廓拐点的左边存起来
findContours(img_dilate,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
cout<<"contours"<<contours.size()<<endl;

vector< vector<Point> > contours_new(contours.size()); //存放处理后的轮廓数据
vector<Rect> boundRect(contours.size());
int j=contours.size();
int x=0,y=0,w=0,h=0;
for (int i=0;i<j;i++)
{
    //opencv的函数 对指定的点集进行多边形逼近的函数
    //参数一 输入的点集 参数二 输出的点集 参数三 精度 在范围内则保留 范围外则丢弃 参数四 曲线闭合 或断开
    approxPolyDP(Mat(contours[i]),contours_new[i],3,true); //

    //取出每一个 点 缝合起来
    boundRect[i]=boundingRect( Mat(contours_new[i]) ); //用此函数可以得到包裹轮廓的最小矩形

    x=boundRect[i].x;
    y=boundRect[i].y;
    w=boundRect[i].width;
    h=boundRect[i].height;
    cout<<"x"<<x<<"y"<<y<<"w"<<w<<"h"<<h<<endl;
    rectangle(result,Point(x,y),Point(x+w,y+h),Scalar(0,255,0),2,8,0); //在图片result上绘制边框

}

imshow("rec:",result);

二、上课没有听懂或者没有理解的地方

三、当天学习的收获

学习了qt的事件循环机制,理解了为什么循环show图片却不会实时显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值