210322阶段三QT事件循环及opencv图像处理
生活随笔
收集整理的這篇文章主要介紹了
210322阶段三QT事件循环及opencv图像处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 一、學習的知識點
- 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圖片卻不會實時顯示。
總結
以上是生活随笔為你收集整理的210322阶段三QT事件循环及opencv图像处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 210319opencv图像的存储与显示
- 下一篇: c++基础入门(根据浙大翁恺老师视频整理