Changeset 338 in flair-src for trunk/lib/FlairVisionFilter/src/Sobel.cpp
- Timestamp:
- 10/17/19 14:49:35 (5 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to
/branches/sanscv merged eligible
-
Property svn:mergeinfo
set to
-
trunk/lib/FlairVisionFilter/src/Sobel.cpp
r330 r338 13 13 14 14 #include "Sobel.h" 15 #include <cvimage.h> 15 #include "VisionFilter.h" 16 #include <Image.h> 16 17 #include <Layout.h> 17 18 #include <GroupBox.h> … … 23 24 using namespace flair::gui; 24 25 26 class Sobel_impl { 27 public: 28 Sobel_impl(flair::filter::Sobel *self,const LayoutPosition* position,string name):output(0) { 29 this->self=self; 30 31 GroupBox* reglages_groupbox=new GroupBox(position,name); 32 dx=new SpinBox(reglages_groupbox->NewRow(),"dx:",0,1,1,1); 33 dy=new SpinBox(reglages_groupbox->NewRow(),"dy:",0,1,1,1); 34 35 Printf("TODO: IODevice doit faire un check de GetInputDataType et GetOutputDataType\n"); 36 //Image devrait accepter un type dans son constructeur pour construire un type identique 37 try{ 38 Image::Type const &imageType=dynamic_cast<Image::Type const &>(((IODevice*)(self->Parent()))->GetOutputDataType()); 39 if(imageType.GetFormat()==Image::Type::Format::Gray) { 40 output=new Image(self,imageType.GetWidth(),imageType.GetHeight(),imageType.GetFormat(),"sobel"); 41 //inIplImage = (IplImage*)AllocFunction(sizeof(IplImage)); 42 //outIplImage = (IplImage*)AllocFunction(sizeof(IplImage)); 43 } else { 44 self->Err("input image is not gray\n"); 45 } 46 47 } catch(std::bad_cast& bc) { 48 self->Err("io type mismatch\n"); 49 } 50 } 51 52 ~Sobel_impl() { 53 //FreeFunction((char*)(inIplImage)); 54 //FreeFunction((char*)(outIplImage)); 55 } 56 57 void UpdateFrom(const io_data *data){ 58 Image *image=(Image*)data; 59 /* 60 data->GetMutex(); 61 inIplImage->width=image->GetDataType().GetWidth(); 62 inIplImage->height=image->GetDataType().GetHeight(); 63 inIplImage->imageData=image->buffer; 64 inIplImage->imageSize=image->GetDataType().GetSize(); 65 66 output->GetMutex(); 67 outIplImage->width=output->GetDataType().GetWidth(); 68 outIplImage->height=output->GetDataType().GetHeight(); 69 outIplImage->imageData=output->buffer; 70 outIplImage->imageSize=output->GetDataType().GetSize(); 71 72 dspSobel(inIplImage,outIplImage,dx->Value(),dy->Value()); 73 output->ReleaseMutex(); 74 data->ReleaseMutex(); 75 */ 76 output->SetDataTime(data->DataTime()); 77 78 }; 79 80 Image *output; 81 82 private: 83 flair::filter::Sobel *self; 84 SpinBox *dx; 85 SpinBox *dy; 86 //IplImage *inIplImage,*outIplImage; 87 }; 88 25 89 namespace flair { namespace filter { 26 90 27 Sobel::Sobel(const IODevice* parent,const LayoutPosition* position,string name) : IODevice(parent,name),output(0) { 28 GroupBox* reglages_groupbox=new GroupBox(position,name); 29 dx=new SpinBox(reglages_groupbox->NewRow(),"dx:",0,1,1,1); 30 dy=new SpinBox(reglages_groupbox->NewRow(),"dy:",0,1,1,1); 31 32 Printf("TODO: IODevice doit faire un check de GetInputDataType et GetOutputDataType\n"); 33 //cvimage devrait accepter un type dans son constructeur pour construire un type identique 34 try{ 35 cvimage::Type const &imageType=dynamic_cast<cvimage::Type const &>(parent->GetOutputDataType()); 36 if(imageType.GetFormat()==cvimage::Type::Format::Gray) { 37 output=new cvimage(this,imageType.GetWidth(),imageType.GetHeight(),imageType.GetFormat(),"sobel"); 38 } else { 39 Err("input image is not gray\n"); 40 return; 41 } 42 43 } catch(std::bad_cast& bc) { 44 Err("io type mismatch\n"); 45 return; 46 } 47 SetIsReady(true); 91 Sobel::Sobel(const IODevice* parent,const LayoutPosition* position,string name) : IODevice(parent,name) { 92 pimpl_=new Sobel_impl(this,position,name); 48 93 } 49 94 50 95 Sobel::~Sobel(void) { 96 delete pimpl_; 51 97 } 52 98 53 cvimage* Sobel::Output(void) {54 return output;99 Image* Sobel::Output(void) { 100 return pimpl_->output; 55 101 } 56 102 57 void Sobel::UpdateFrom(const io_data *data) {/* 58 cvimage *cvImage=(cvimage*)data; 59 IplImage *gimg=cvImage->img; 60 61 data->GetMutex(); 62 output->GetMutex(); 63 dspSobel(gimg,output->img,dx->Value(),dy->Value()); 64 output->ReleaseMutex(); 65 data->ReleaseMutex(); 66 */ 67 output->SetDataTime(data->DataTime()); 68 ProcessUpdate(output); 103 void Sobel::UpdateFrom(const io_data *data) { 104 pimpl_->UpdateFrom(data); 105 ProcessUpdate(pimpl_->output); 69 106 } 70 107 71 108 DataType const &Sobel::GetOutputDataType() const { 72 if( output!=NULL) {73 return output->GetDataType();109 if(pimpl_->output!=NULL) { 110 return pimpl_->output->GetDataType(); 74 111 } else { 75 112 return dummyType;
Note:
See TracChangeset
for help on using the changeset viewer.