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 ); }
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(); }
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 ) ); } } } }
inline RawPixel luminance(boost::gil::channel_type<RawPixel>::type value) { return RawPixel(value, value, value); }
inline RawPixel white() { return RawPixel(65535, 65535, 65535); }
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; } } } }
RawPixel operator"" _em(unsigned long long pixel) { return RawPixel(pixel); }
RawPixel operator"" _em(long double pixel) { return RawPixel(pixel); }