前言
博主近期看到海康VM、halcon以及visionpro視覺軟件都包含一個圖像智能交互控件,然后近期根據(jù)其中的技術(shù)原理,也基于Qt5仿照開發(fā)了一個類似的功能,包含矩形、旋轉(zhuǎn)矩形、任意多邊形、圓、圓環(huán)、扇環(huán),直線卡尺以及圓卡尺等常用控件,圖像智能交互是在計算機視覺領(lǐng)域中常用的技術(shù),用于視覺軟件圖像ROI,廣泛應(yīng)用于工業(yè)自動化、機器視覺等領(lǐng)域。具體效果如下:
Qt5圖像智能交互控件
一、圖像交互控件
1.1 概述
在機器視覺領(lǐng)域,常用的圖像交互控件包括以下幾種:
-
標注工具(Annotation Tools):標注工具允許用戶在圖像上進行標注和繪制,例如繪制邊界框。這些標注可用于圖像分類、目標檢測、語義分割等任務(wù)的數(shù)據(jù)標注。
-
拖動和調(diào)整工具(Drag and Adjust Tools):這些工具允許用戶通過拖動或調(diào)整圖像中的特定區(qū)域來進行交互。例如,可以拖動邊界框或控制點來調(diào)整目標的位置、大小或形狀。
-
交互式區(qū)域選擇工具(Interactive Region Selection Tools):這些工具允許用戶通過繪制、拖動或選擇特定區(qū)域來指定感興趣的區(qū)域。例如,用戶可以使用矩形選擇工具、多邊形選擇工具或魔棒工具來選擇圖像中的目標或區(qū)域。
-
縮放和導航工具(Zoom and Navigation Tools):這些工具用于在圖像上進行縮放、平移和導航操作,以便用戶可以查看和分析圖像的不同部分。常見的縮放和導航工具包括放大、縮小、平移和旋轉(zhuǎn)操作。
-
參數(shù)調(diào)整滑塊(Parameter Adjustment Sliders):在機器視覺任務(wù)中,一些算法或模型可能需要調(diào)整不同的參數(shù)或閾值。參數(shù)調(diào)整滑塊允許用戶通過滑動滑塊來調(diào)整參數(shù)的值,并實時觀察算法或模型的輸出變化。
博主采用交互控件寫的兩個文章如下:
第一個:利用OpenCV與Qt5構(gòu)建卡尺擬合直線工具(C++實現(xiàn))
第二個:利用OpenCV與Qt5構(gòu)建卡尺找圓工具(C++實現(xiàn))
1.2 圖像顯示交互功能
本文采用Qt5的QGraphicsView顯示圖像控件,QGraphicsScene用來管理圖形交互控件,Qt5中的QGraphicsView是一個圖形視圖框架,用于在應(yīng)用程序中顯示和交互2D圖形。它是Qt的圖形模塊(Graphics Module)提供的一部分,為開發(fā)者提供了一個靈活的工具來創(chuàng)建基于圖形的用戶界面。
QGraphicsView的主要功能包括:
-
圖形顯示:QGraphicsView允許開發(fā)者在視圖中顯示2D圖形項(Graphics Item),例如圖像、文本、幾何圖形、路徑等。這些圖形項可以自定義外觀、位置和交互行為。
-
縮放和平移:通過QGraphicsView,用戶可以通過鼠標滾輪或手勢來縮放視圖中的圖形,以及通過鼠標拖動來平移視圖。這使用戶能夠查看和導航大型或超出視圖邊界的圖形。
-
坐標系統(tǒng):QGraphicsView提供了一個坐標系統(tǒng),允許用戶在視圖中進行圖形項的定位和操作。開發(fā)者可以指定視圖中的邏輯坐標,并使用這些坐標來添加、移動和變換圖形項。
-
交互操作:通過QGraphicsView,開發(fā)者可以實現(xiàn)豐富的交互功能,例如選擇圖形項、拖動圖形項、縮放選定的圖形項等。這些交互操作可以通過重寫相應(yīng)的事件處理函數(shù)來實現(xiàn)。
-
雙緩沖繪制:QGraphicsView使用雙緩沖技術(shù),以提供平滑的繪制和動畫效果。它可以高效地處理大量圖形項的繪制,并自動進行局部更新,以減少繪制的開銷。
-
視圖和場景:QGraphicsView與QGraphicsScene一起使用,QGraphicsScene提供了圖形項的容器,并管理它們之間的關(guān)系。QGraphicsView充當了場景的視圖,用于在窗口中顯示場景中的圖形項。
1.3 棋盤格功能實現(xiàn)
圖像顯示為棋盤格實現(xiàn)代碼如下:
void myqgraphicsview::drawBackground(QPainter * painter, const QRectF & rect)
{
//繪制灰白棋盤圖像背景
int wid = this->geometry().width();
int hei = this->geometry().height();
QPointF m_ptCenter = this->mapToScene(wid / 2, hei / 2);
QPixmap pix(wid, hei);
QPainter pter(&pix);
QColor clr_white(Qt::white);
QColor clr_gray(240, 240, 240, 240);
int spacing = 15;
QColor useColor;
for (int i = 0; i <= floor(wid / spacing); i++)
{
for (int j = 0; j <= floor(hei / spacing); j++)
{
useColor = ((i + j) % 2 == 0 ? clr_white : clr_gray);
pter.fillRect(i*spacing, j*spacing, spacing, spacing, useColor);
}
}
painter->drawImage(rect, pix.toImage());
}
1.4 形狀控件基類
QAbstractGraphicsShapeItem是Qt中的一個抽象基類,用于表示具有形狀的圖形項(Graphics Item)。它是QGraphicsItem的子類,用于在QGraphicsScene中顯示和操作2D圖形。
QAbstractGraphicsShapeItem的主要特征和功能如下:
-
形狀定義:它定義了一個圖形項的形狀,可以是矩形、橢圓、多邊形等。開發(fā)者可以通過重寫shape()函數(shù)來自定義形狀。
-
外觀樣式:它具有一系列用于設(shè)置圖形項外觀的函數(shù),如設(shè)置邊框顏色、填充顏色、線寬等。通過這些函數(shù),可以定制圖形項的外觀樣式。
-
碰撞檢測:它提供了一些用于碰撞檢測的函數(shù),如collidesWithItem()和collidesWithPath()。這些函數(shù)可用于判斷圖形項與其他圖形項或路徑是否發(fā)生碰撞。
-
交互操作:通過重寫鼠標事件處理函數(shù),可以實現(xiàn)與QAbstractGraphicsShapeItem的交互操作,如鼠標點擊、拖動、移動等??梢愿鶕?jù)需要進行自定義的交互行為。
-
變換和位置:它繼承了QGraphicsItem的功能,可以進行圖形項的位置設(shè)置、旋轉(zhuǎn)、縮放等變換操作。
QAbstractGraphicsShapeItem是一個抽象基類,不能直接實例化,需要通過繼承并重寫其純虛函數(shù)來創(chuàng)建具體的形狀圖形項。常見的具體子類包括QGraphicsRectItem(矩形圖形項)、QGraphicsEllipseItem(橢圓圖形項)和QGraphicsPolygonItem(多邊形圖形項)等,它們分別提供了矩形、橢圓和多邊形形狀的圖形項。使用QAbstractGraphicsShapeItem及其子類,開發(fā)者可以方便地創(chuàng)建具有形狀和外觀樣式的2D圖形項,并在QGraphicsScene中進行顯示、交互和操作。這為繪圖、圖形編輯、數(shù)據(jù)可視化等應(yīng)用提供了強大的圖形繪制和操作功能。
1.5 鼠標交互實現(xiàn)
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
virtual void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
二、功能展示
2.1 圖像加載
2.2 圖像放大
2.3 圖像縮小
2.4 圖像自適應(yīng)
2.5 圖像實際大小
2.6 矩形框控件
2.7 旋轉(zhuǎn)矩形框控件
2.8 任意多邊形控件
2.9 圓控件
2.10同心圓控件
2.11 扇環(huán)控件
2.12 直線卡尺控件
2.13 圓卡尺控件
文章來源:http://www.zghlxwxcb.cn/news/detail-755044.html
總結(jié)
由于博主能力有限,本篇文章中提及的方法,也難免會有疏漏之處,希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹?shù)臉幼?,呈現(xiàn)在大家面前。文章來源地址http://www.zghlxwxcb.cn/news/detail-755044.html
到了這里,關(guān)于基于Qt5的圖像交互控件開發(fā)(C++實現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!