RawPixel
FloodFillState::averageColour( void ) const
{
  unsigned int red;
  unsigned int green;
  unsigned int blue;

  if ( _size > 0 )
    {
      red = _avgRed / _size;
      green = _avgGreen / _size;
      blue = _avgBlue / _size;
    }
  else
    {
      red = 0;
      green = 0;
      blue = 0;
    }

  red = Geometry::clamp( 0, red, 255 );
  green = Geometry::clamp( 0, green, 255 );
  blue = Geometry::clamp( 0, blue, 255 );

  return RawPixel( red, green, blue );
}
示例#2
0
void FilterExpanderLabel::UpdateLayoutSizes()
{
  auto& style = dash::Style::Instance();

  layout_->SetLeftAndRightPadding(style.GetFilterBarLeftPadding().CP(scale), style.GetFilterBarRightPadding().CP(scale));
  top_bar_layout_->SetTopAndBottomPadding(style.GetFilterHighlightPadding().CP(scale));
  expander_layout_->SetSpaceBetweenChildren(EXPANDER_LAYOUT_SPACE_BETWEEN_CHILDREN.CP(scale));

  auto const& tex = expand_icon_->texture();
  expand_icon_->SetMinMaxSize(RawPixel(tex->GetWidth()).CP(scale), RawPixel(tex->GetHeight()).CP(scale));

  arrow_layout_->SetLeftAndRightPadding(ARROW_HORIZONTAL_PADDING.CP(scale));
  arrow_layout_->SetTopAndBottomPadding(ARROW_TOP_PADDING.CP(scale), ARROW_BOTTOM_PADDING.CP(scale));

  QueueRelayout();
  QueueDraw();
}
示例#3
0
void FilterExpanderLabel::DoExpandChange(bool change)
{
  dash::Style& style = dash::Style::Instance();
  if (expanded)
    expand_icon_->SetTexture(style.GetGroupUnexpandIcon());
  else
    expand_icon_->SetTexture(style.GetGroupExpandIcon());

  auto const& tex = expand_icon_->texture();
  expand_icon_->SetMinMaxSize(RawPixel(tex->GetWidth()).CP(scale), RawPixel(tex->GetHeight()).CP(scale));

  if (change and contents_ and !contents_->IsChildOf(layout_))
  {
    layout_->AddLayout(contents_.GetPointer(), 1, nux::MINOR_POSITION_START, nux::MINOR_SIZE_FULL, 100.0f, nux::LayoutPosition(1));
  }
  else if (!change and contents_ and contents_->IsChildOf(layout_))
  {
    layout_->RemoveChildObject(contents_.GetPointer());
  }

  layout_->ComputeContentSize();
  QueueDraw();
}
void
ImageProcessing::medianFilter( FrameBuffer const * frame, FrameBuffer * outFrame, unsigned int subSample )
{
  int red, green, blue;
  RawPixel pixel;
  FrameBufferIterator iter( frame, 0, 0 );
  RawPixel setPixel;
  
  if (outFrame == 0 )
    {
      outFrame = const_cast<FrameBuffer *> ( frame );
    }
  
  FrameBufferIterator outIter( outFrame, 0, 0 );
  
  for( unsigned int i = 0; i < frame->height - 1; i += subSample )
    {
      iter.goPosition( i, 0 );
      outIter.goPosition( i, 0 );
      
      for( unsigned int j = 0; j < frame->width - 1; j += subSample, iter.goRight( subSample ), outIter.goRight( 1 ) )
	{
	  iter.getPixel( & pixel );
	  red = pixel.red;
	  green = pixel.green;
	  blue = pixel.blue;
          
	  iter.getPixel( & pixel, frame->bytesPerPixel );
	  red = red + pixel.red;
	  green = green + pixel.green;
	  blue = blue + pixel.blue;
          
	  iter.getPixel( & pixel, frame->bytesPerLine );
	  red = red + pixel.red;
	  green = green + pixel.green;
	  blue = blue + pixel.blue;
          
	  iter.getPixel( & pixel, frame->bytesPerLine + frame->bytesPerPixel );
	  red = red + pixel.red;
	  green = green + pixel.green;
	  blue = blue + pixel.blue;
          
	  setPixel = RawPixel( red/4, green/4, blue/4 );
	  outIter.setPixel( setPixel, 0 );
	}
    }
}
void
segmentScanLines( FrameBuffer * frame )
{
  FrameBufferIterator it( frame );
  RawPixel prev;
  RawPixel cPixel;

  for( unsigned int row = 0; row < frame->height; row++ )
    {
      it.goPosition( row, 0 );
      it.getRawPixel( & prev );
      it.goRight();
      for( unsigned int col = 0; col < frame->width; col++, it.goRight() )
	{
	  it.getPixel( & cPixel );
	  if ( cPixel.intensity() < 100 )
	    {
	      it.setPixel( RawPixel( 0, 255, 255 ) );
	    }
	}
    }
}
示例#6
0
inline RawPixel luminance(boost::gil::channel_type<RawPixel>::type value) { return RawPixel(value, value, value); }
示例#7
0
inline RawPixel white() { return RawPixel(65535, 65535, 65535); }
示例#8
0
inline RawPixel black() { return RawPixel(0, 0, 0); }
void
ImageProcessing::SegmentColours( FrameBuffer * frame, 
				 FrameBuffer * outFrame, 
				 unsigned int threshold, 
				 unsigned int minLength,
				 unsigned int minSize,
				 unsigned int subSample,
				 ColourDefinition const & target,
				 RawPixel const & mark,
				 std::vector<VisionObject> & results
				 )
{
  FrameBufferIterator it( frame );
  FrameBufferIterator oit( outFrame );
  Pixel cPixel;
  RawPixel oPixel;
  //  unsigned int len;
  FloodFillState state;
  unsigned int count;
  
  for( unsigned int row = 0; row < frame->height; row = row + subSample )
    {
      it.goPosition(row, subSample);
      oit.goPosition(row, subSample);

      count = 0;
      for( unsigned int col = subSample; col < frame->width; col = col + subSample, it.goRight( subSample ),oit.goRight( subSample ) )
	{
	  oit.getPixel( & oPixel );
	  if ( oPixel == RawPixel( 0, 0, 0 ) )
	    {
	      it.getPixel( & cPixel );
	      
	      if ( target.isMatch( cPixel ) )
		{
		  count++;
		}
	      else
		{
		  count = 0;
		}
	      
	      if ( count >= minLength )
		{
		  state.initialize();
		  doFloodFill( frame, outFrame, Point( col, row), 
			       cPixel, threshold, & target, 
			       subSample, & state );
		  
#ifdef XX_DEBUG
		  if ( state.size() > minSize )
		    {
		      std::cout << "Flood fill returns size " << state.size() << std::endl;
		    }
#endif
		  if ( state.size() > minSize )
		    {
		      unsigned int tlx = state.bBox().topLeft().x();
		      unsigned int tly = state.bBox().topLeft().y();
		      unsigned int brx = state.bBox().bottomRight().x();
		      unsigned int bry = state.bBox().bottomRight().y();
		      
		      drawBresenhamLine( outFrame, tlx, tly, tlx, bry, mark );
		      drawBresenhamLine( outFrame, tlx, bry, brx, bry, mark );
		      drawBresenhamLine( outFrame, brx, bry, brx, tly, mark );
		      drawBresenhamLine( outFrame, brx, tly, tlx, tly, mark );

		      drawBresenhamLine( frame, tlx, tly, tlx, bry, mark );
		      drawBresenhamLine( frame, tlx, bry, brx, bry, mark );
		      drawBresenhamLine( frame, brx, bry, brx, tly, mark );
		      drawBresenhamLine( frame, brx, tly, tlx, tly, mark );
		      //		      swapColours( outFrame, 0, state.bBox(), 1, ColourDefinition( Pixel(colour), Pixel(colour) ), state.averageColour() );
		      VisionObject vo( target.name, state.size(), state.x(), state.y(), state.averageColour(), state.bBox() );

		      std::vector<VisionObject>::iterator i;

		      for( i = results.begin();
			   i != results.end();
			   ++i)
			{
			  if ( (*i).size < vo.size )
			    {
			      break;
			    }
			}
		      results.insert(i, vo );
		    }
		  count = 0;
		}
	    }
	  else
	    {
	      count = 0;
	    }
	}
    }
}
示例#10
0
RawPixel operator"" _em(unsigned long long pixel)
{
  return RawPixel(pixel);
}
示例#11
0
RawPixel operator"" _em(long double pixel)
{
  return RawPixel(pixel);
}