diff --git a/label_img.cpp b/label_img.cpp index e968c22..76c400a 100644 --- a/label_img.cpp +++ b/label_img.cpp @@ -80,6 +80,7 @@ void label_img::init() { m_objBoundingBoxes.clear(); m_bLabelingStarted = false; + m_bVisualizeClassName = false; m_focusedObjectLabel = 0; QPoint mousePosInUi = this->mapFromGlobal(QCursor::pos()); @@ -125,7 +126,8 @@ void label_img::openImage(const QString &qstrImg, bool &ret) m_inputImg = img.copy(); m_inputImg = m_inputImg.convertToFormat(QImage::Format_RGB888); - m_resized_inputImg = m_inputImg.scaled(this->width(), this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation); + m_resized_inputImg = m_inputImg.scaled(this->width(), this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation) + .convertToFormat(QImage::Format_RGB888); m_bLabelingStarted = false; @@ -148,7 +150,8 @@ void label_img::showImage() if(m_inputImg.isNull()) return; if(m_resized_inputImg.width() != this->width() or m_resized_inputImg.height() != this->height()) { - m_resized_inputImg = m_inputImg.scaled(this->width(), this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation); + m_resized_inputImg = m_inputImg.scaled(this->width(), this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation) + .convertToFormat(QImage::Format_RGB888); } QImage img = m_resized_inputImg; @@ -156,6 +159,11 @@ void label_img::showImage() gammaTransform(img); QPainter painter(&img); + QFont font = painter.font(); + int fontSize = 16, xMargin = 5, yMargin = 2; + font.setPixelSize(fontSize); + font.setBold(true); + painter.setFont(font); int penThick = 3; @@ -164,6 +172,8 @@ void label_img::showImage() drawCrossLine(painter, crossLineColor, penThick); drawFocusedObjectBox(painter, Qt::magenta, penThick); drawObjectBoxes(painter, penThick); + if(m_bVisualizeClassName) + drawObjectLabels(painter, penThick, fontSize, xMargin, yMargin); this->setPixmap(QPixmap::fromImage(img)); } @@ -279,6 +289,36 @@ void label_img::drawObjectBoxes(QPainter& painter, int thickWidth) } } +void label_img::drawObjectLabels(QPainter& painter, int thickWidth, int fontPixelSize, int xMargin, int yMargin) +{ + QFontMetrics fontMetrics = painter.fontMetrics(); + QPen blackPen; + + for(ObjectLabelingBox boundingbox: m_objBoundingBoxes) + { + QColor labelColor = m_drawObjectBoxColor.at(boundingbox.label); + QRect rectUi = cvtRelativeToAbsoluteRectInUi(boundingbox.box); + + QRect labelRect = fontMetrics.boundingRect(m_objList.at(boundingbox.label)); + if (rectUi.top() > fontPixelSize + yMargin * 2 + thickWidth + 1) { + labelRect.moveTo(rectUi.topLeft() + QPoint(-thickWidth / 2, -(fontPixelSize + yMargin * 2 + thickWidth + 1))); + labelRect.adjust(0, 0, xMargin * 2, yMargin * 2); + } else { + labelRect.moveTo(rectUi.topLeft() + QPoint(-thickWidth / 2, 0)); + labelRect.adjust(0, 0, xMargin * 2, yMargin * 2); + } + painter.fillRect(labelRect, labelColor); + + if (qGray(m_drawObjectBoxColor.at(boundingbox.label).rgb()) > 120) { + blackPen.setColor(QColorConstants::Black); + } else { + blackPen.setColor(QColorConstants::White); + } + painter.setPen(blackPen); + painter.drawText(labelRect.topLeft() + QPoint(xMargin, yMargin + fontPixelSize), m_objList.at(boundingbox.label)); + } +} + void label_img::gammaTransform(QImage &image) { uchar* bits = image.bits(); diff --git a/label_img.h b/label_img.h index 1badeda..157f8bc 100644 --- a/label_img.h +++ b/label_img.h @@ -25,6 +25,7 @@ public: void mouseReleaseEvent(QMouseEvent *ev); QVector m_drawObjectBoxColor; + QStringList m_objList; int m_uiX; int m_uiY; @@ -33,6 +34,7 @@ public: int m_imgY; bool m_bLabelingStarted; + bool m_bVisualizeClassName; static QColor BOX_COLORS[10]; @@ -86,6 +88,7 @@ private: void drawCrossLine(QPainter& , QColor , int thickWidth = 3); void drawFocusedObjectBox(QPainter& , Qt::GlobalColor , int thickWidth = 3); void drawObjectBoxes(QPainter& , int thickWidth = 3); + void drawObjectLabels(QPainter& , int thickWidth = 3, int fontPixelSize = 14, int xMargin = 5, int yMargin = 2); void gammaTransform(QImage& image); void removeFocusedObjectBox(QPointF); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 4c867bf..34cccc4 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -198,7 +198,7 @@ void MainWindow::remove_img() } else if( m_imgIndex == m_imgList.size()) { - m_imgIndex --; + m_imgIndex--; } goto_img(m_imgIndex); @@ -250,6 +250,7 @@ void MainWindow::load_label_list_data(QString qstrLabelListFile) ui->label_image->m_drawObjectBoxColor.push_back(labelColor); } + ui->label_image->m_objList = m_objList; } } @@ -360,11 +361,6 @@ void MainWindow::open_obj_file(bool& ret) } } -void MainWindow::reupdate_img_list() -{ - -} - void MainWindow::wheelEvent(QWheelEvent *ev) { if(ev->angleDelta().y() > 0) // up Wheel @@ -479,3 +475,9 @@ void MainWindow::on_horizontalSlider_contrast_sliderMoved(int value) ui->label_image->setContrastGamma(percentageToGamma); ui->label_contrast->setText(QString("Contrast(%) ") + QString::number(int(valueToPercentage * 100.))); } + +void MainWindow::on_checkBox_visualize_class_name_clicked(bool checked) +{ + ui->label_image->m_bVisualizeClassName = checked; + ui->label_image->showImage(); +} diff --git a/mainwindow.h b/mainwindow.h index 9312377..f958522 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -23,10 +23,6 @@ public: private slots: void on_pushButton_open_files_clicked(); -// void on_pushButton_change_dir_clicked(); -// void on_pushButton_save_clicked(); -// void on_pushButton_remove_clicked(); - void on_pushButton_prev_clicked(); void on_pushButton_next_clicked(); @@ -48,6 +44,8 @@ private slots: void on_horizontalSlider_contrast_sliderMoved(int value); + void on_checkBox_visualize_class_name_clicked(bool checked); + private: void init(); void init_table_widget(); @@ -71,8 +69,6 @@ private: void open_img_dir(bool&); void open_obj_file(bool&); - void reupdate_img_list(); - Ui::MainWindow *ui; QString m_imgDir; diff --git a/mainwindow.ui b/mainwindow.ui index b1b676f..18c7baa 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -57,7 +57,7 @@ - + @@ -77,6 +77,7 @@ + Arial 18 75 true @@ -106,7 +107,7 @@ border-color: rgb(0, 255, 255);} 3 - <html><head/><body><p>Open a Dataset Directory...</p><p>D: Next Image</p><p>A: Prev Image</p><p><br/>Ctrl + S: Save</p><p>Ctrl + D: Delete an Image<br/></p></body></html> + <html><head/><body><p>Open a Dataset Directory...</p><p>D: Next Image</p><p>A: Prev Image</p><p>S: Next Class</p><p>W: Prev Class</p><p>V: Visualize Class Name</p><p>O: Open Files<br/>Ctrl + S: Save</p><p>Ctrl + D: Delete an Image<br/></p></body></html> true @@ -396,6 +397,9 @@ border-color: rgb(0, 255, 255); Open Files + + O + false @@ -575,6 +579,32 @@ QTableView { + + + + + + + Arial + 12 + false + false + + + + background-color : rgb(0, 0, 17);color : rgb(0, 255, 255); + + + + Visualize Class Name + + + V + + + + +