]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
first try for fix (doesn't compile) rnc/contours_detection_bugfix
authorFlorian BRUNET <FB15EB3N@dsp0657834.(none)>
Thu, 23 Apr 2015 14:46:20 +0000 (16:46 +0200)
committerFlorian BRUNET <FB15EB3N@dsp0657834.(none)>
Thu, 23 Apr 2015 14:46:20 +0000 (16:46 +0200)
src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx
src/ShapeRecognition/ShapeRec_FeatureDetector.cxx
src/ShapeRecognition/ShapeRec_FeatureDetector.hxx

index a2d7c67a282df3ef8a364094129153e90618c9bb..303861beb9f10a0fab4a8562432da1da78b9543e 100644 (file)
@@ -396,7 +396,7 @@ void EntityGUI_FeatureDetectorDlg::Init()
 //=================================================================================
 void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument()
 {
-  
+  MESSAGE("EntityGUI_FeatureDetectorDlg::SelectionIntoArgument()")
   // TODO supprimer les lignes qui ne servent à rien le cas échéant
   SUIT_ViewWindow*       theViewWindow  = getDesktop()->activeWindow();
   std::map< std::string , std::vector<Handle(AIS_InteractiveObject)> >::iterator AISit;
@@ -428,6 +428,7 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument()
   GEOM::GeomObjPtr aSelectedObject = getSelected( aNeedType );
   TopoDS_Shape aShape;
   if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ) {
+    MESSAGE("EntityGUI_FeatureDetectorDlg::SelectionIntoArgument() # REPERE 1")
     QString aName = GEOMBase::GetName( aSelectedObject.get() );
     myEditCurrentArgument->setText( aName );
     
@@ -445,12 +446,17 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument()
       else
         return ;
       
-      std::string theImgFileName = myAISShape->TextureFile();      
-      if ( theImgFileName == "" )
-        return ;
+      MESSAGE("EntityGUI_FeatureDetectorDlg::SelectionIntoArgument() # REPERE 2")
+      //std::string theImgFileName = myAISShape->TextureFile();  
+      Image_PixMap anImage = myAISShape->Image_PixMap();
+//       MESSAGE("theImgFileName = "<<theImgFileName)
+//       if ( theImgFileName == "" )
+//         return ;
 
       // Setting the image caracteristics
-      myDetector->SetPath( theImgFileName );
+//       MESSAGE("theImgFileName = "<<theImgFileName)
+//       myDetector->SetPath( theImgFileName );
+      myDetector->SetImage( anImage );
       height            =  myDetector->GetImgHeight();
       width             =  myDetector->GetImgWidth();
       pictureLeft       = -0.5 * width;              // X coordinate of the top left  corner of the background image in the view
@@ -677,8 +683,13 @@ void EntityGUI_FeatureDetectorDlg::setEndPnt(const gp_Pnt& theEndPnt)
 {
   myEndPnt = theEndPnt;
   MESSAGE("myEndPnt = ("<<theEndPnt.X()<<", "<<theEndPnt.Y()<<")")
+  bool test_1 = myDetector->GetImgHeight() > 0;
+  MESSAGE("REPERE 0 : setSelectionRect() = "<<setSelectionRect()<<"myDetector->GetImgHeight()"<<myDetector->GetImgHeight())
   if (setSelectionRect() && myDetector->GetImgHeight() > 0)
+  { 
+    MESSAGE("REPERE 1")
     showImageSample();
+  }
 }
 
 //=================================================================================
@@ -710,6 +721,7 @@ void EntityGUI_FeatureDetectorDlg::showImageSample()
   // Cropp the image to the selection rectangle given by the user
   myDetector->SetROI( myRect ); 
   std::string samplePicturePath = myDetector->CroppImage();
+  MESSAGE("samplePicturePath = "<<samplePicturePath)
   
   // Display the result
   QPixmap pixmap(QString(samplePicturePath.c_str()));
index 4d3adaa3b0034b3c2997c5a4bb9cb116216c8664..633edb3e77e92a386605b8a213285d2e7f3b99d3 100644 (file)
@@ -64,6 +64,17 @@ void ShapeRec_FeatureDetector::SetPath( const std::string& thePath )
   }
 }
 
+
+/*!
+  Sets the the image to be processed
+  \param theImage - QPixMap input image
+*/
+void ShapeRec_FeatureDetector::SetImage( const QPixmap& input_img )
+{
+  cv::Mat image = QPixmapToCvMat( input_img, false );
+}
+
+
 /*!
   Computes the corners of the image located at imagePath
 */
index b3941e6f5858f86f7838564796d77754ead9154e..a12abe819e4e965df7a72d115f8d6b16f4457e9b 100644 (file)
@@ -31,6 +31,7 @@
 
 // Qt
 #include <QRect>
+#include <QPixmap>
 
 #ifdef WIN32
   #if defined GEOM_SHAPEREC_EXPORTS || defined GEOMShapeRec_EXPORTS
    #define GEOM_SHAPEREC_EXPORT
 #endif
 
+
+// If inImage exists for the lifetime of the resulting cv::Mat, pass false to inCloneImageData to share inImage's
+// data with the cv::Mat directly
+//    NOTE: Format_RGB888 is an exception since we need to use a local QImage and thus must clone the data regardless
+inline cv::Mat QImageToCvMat( const QImage &inImage, bool inCloneImageData = true )
+{
+  switch ( inImage.format() )
+  {
+      // 8-bit, 4 channel
+      case QImage::Format_RGB32:
+      {
+       cv::Mat  mat( inImage.height(), inImage.width(), CV_8UC4, const_cast<uchar*>(inImage.bits()), inImage.bytesPerLine() );
+
+       return (inCloneImageData ? mat.clone() : mat);
+      }
+
+      // 8-bit, 3 channel
+      case QImage::Format_RGB888:
+      {
+       if ( !inCloneImageData )
+           qWarning() << "ASM::QImageToCvMat() - Conversion requires cloning since we use a temporary QImage";
+
+       QImage   swapped = inImage.rgbSwapped();
+
+       return cv::Mat( swapped.height(), swapped.width(), CV_8UC3, const_cast<uchar*>(swapped.bits()), swapped.bytesPerLine() ).clone();
+      }
+
+      // 8-bit, 1 channel
+      case QImage::Format_Indexed8:
+      {
+       cv::Mat  mat( inImage.height(), inImage.width(), CV_8UC1, const_cast<uchar*>(inImage.bits()), inImage.bytesPerLine() );
+
+       return (inCloneImageData ? mat.clone() : mat);
+      }
+
+      default:
+       qWarning() << "ASM::QImageToCvMat() - QImage format not handled in switch:" << inImage.format();
+       break;
+  }
+
+  return cv::Mat();
+}
+
+// If inPixmap exists for the lifetime of the resulting cv::Mat, pass false to inCloneImageData to share inPixmap's data
+// with the cv::Mat directly
+//    NOTE: Format_RGB888 is an exception since we need to use a local QImage and thus must clone the data regardless
+inline cv::Mat QPixmapToCvMat( const QPixmap &inPixmap, bool inCloneImageData = true )
+{
+  return QImageToCvMat( inPixmap.toImage(), inCloneImageData );
+}
+
 class GEOM_SHAPEREC_EXPORT ShapeRec_Parameters
 {
 public: