目录
- 一、学习的知识点
- 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画轮廓
- 二、上课没有听懂或者没有理解的地方
- 三、当天学习的收获
一、学习的知识点
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图片却不会实时显示。