OpenCV 4.10.0-dev
Open Source Computer Vision
Loading...
Searching...
No Matches
cv::LineIterator Class Reference

Class for iterating over all pixels on a raster line segment. More...

#include <opencv2/imgproc.hpp>

Collaboration diagram for cv::LineIterator:

Public Member Functions

 LineIterator (const Mat &img, Point pt1, Point pt2, int connectivity=8, bool leftToRight=false)
 Initializes iterator object for the given line and image.
 
 LineIterator (Point pt1, Point pt2, int connectivity=8, bool leftToRight=false)
 
 LineIterator (Rect boundingAreaRect, Point pt1, Point pt2, int connectivity=8, bool leftToRight=false)
 
 LineIterator (Size boundingAreaSize, Point pt1, Point pt2, int connectivity=8, bool leftToRight=false)
 
void init (const Mat *img, Rect boundingAreaRect, Point pt1, Point pt2, int connectivity, bool leftToRight)
 
ucharoperator* ()
 Returns pointer to the current pixel.
 
LineIteratoroperator++ ()
 Moves iterator to the next pixel on the line.
 
LineIterator operator++ (int)
 Moves iterator to the next pixel on the line.
 
Point pos () const
 Returns coordinates of the current pixel.
 

Public Attributes

int count
 
int elemSize
 
int err
 
int minusDelta
 
int minusShift
 
int minusStep
 
Point p
 
int plusDelta
 
int plusShift
 
int plusStep
 
bool ptmode
 
ucharptr
 
const ucharptr0
 
int step
 

Detailed Description

Class for iterating over all pixels on a raster line segment.

The class LineIterator is used to get each pixel of a raster line connecting two specified points. It can be treated as a versatile implementation of the Bresenham algorithm where you can stop at each pixel and do some extra processing, for example, grab pixel values along the line or draw a line with an effect (for example, with XOR operation).

The number of pixels along the line is stored in LineIterator::count. The method LineIterator::pos returns the current position in the image:

// grabs pixels along the line (pt1, pt2)
// from 8-bit 3-channel image to the buffer
LineIterator it(img, pt1, pt2, 8);
LineIterator it2 = it;
vector<Vec3b> buf(it.count);
for(int i = 0; i < it.count; i++, ++it)
buf[i] = *(const Vec3b*)*it;
// alternative way of iterating through the line
for(int i = 0; i < it2.count; i++, ++it2)
{
Vec3b val = img.at<Vec3b>(it2.pos());
CV_Assert(buf[i] == val);
}
Class for iterating over all pixels on a raster line segment.
Definition imgproc.hpp:4961
int count
Definition imgproc.hpp:5031
Point pos() const
Returns coordinates of the current pixel.
Template class for short numerical vectors, a partial case of Matx.
Definition matx.hpp:369
#define CV_Assert(expr)
Checks a condition at runtime and throws exception if it fails.
Definition base.hpp:359

Constructor & Destructor Documentation

◆ LineIterator() [1/4]

cv::LineIterator::LineIterator ( const Mat & img,
Point pt1,
Point pt2,
int connectivity = 8,
bool leftToRight = false )
inline

Initializes iterator object for the given line and image.

The returned iterator can be used to traverse all pixels on a line that connects the given two points. The line will be clipped on the image boundaries.

Parameters
imgUnderlying image.
pt1First endpoint of the line.
pt2The other endpoint of the line.
connectivityPixel connectivity of the iterator. Valid values are 4 (iterator can move up, down, left and right) and 8 (iterator can also move diagonally).
leftToRightIf true, the line is traversed from the leftmost endpoint to the rightmost endpoint. Otherwise, the line is traversed from pt1 to pt2.

◆ LineIterator() [2/4]

cv::LineIterator::LineIterator ( Point pt1,
Point pt2,
int connectivity = 8,
bool leftToRight = false )
inline

◆ LineIterator() [3/4]

cv::LineIterator::LineIterator ( Size boundingAreaSize,
Point pt1,
Point pt2,
int connectivity = 8,
bool leftToRight = false )
inline

◆ LineIterator() [4/4]

cv::LineIterator::LineIterator ( Rect boundingAreaRect,
Point pt1,
Point pt2,
int connectivity = 8,
bool leftToRight = false )
inline

Member Function Documentation

◆ init()

void cv::LineIterator::init ( const Mat * img,
Rect boundingAreaRect,
Point pt1,
Point pt2,
int connectivity,
bool leftToRight )

◆ operator*()

uchar * cv::LineIterator::operator* ( )

Returns pointer to the current pixel.

◆ operator++() [1/2]

LineIterator & cv::LineIterator::operator++ ( )

Moves iterator to the next pixel on the line.

This is the prefix version (++it).

◆ operator++() [2/2]

LineIterator cv::LineIterator::operator++ ( int )

Moves iterator to the next pixel on the line.

This is the postfix version (it++).

◆ pos()

Point cv::LineIterator::pos ( ) const

Returns coordinates of the current pixel.

Member Data Documentation

◆ count

int cv::LineIterator::count

◆ elemSize

int cv::LineIterator::elemSize

◆ err

int cv::LineIterator::err

◆ minusDelta

int cv::LineIterator::minusDelta

◆ minusShift

int cv::LineIterator::minusShift

◆ minusStep

int cv::LineIterator::minusStep

◆ p

Point cv::LineIterator::p

◆ plusDelta

int cv::LineIterator::plusDelta

◆ plusShift

int cv::LineIterator::plusShift

◆ plusStep

int cv::LineIterator::plusStep

◆ ptmode

bool cv::LineIterator::ptmode

◆ ptr

uchar* cv::LineIterator::ptr

◆ ptr0

const uchar* cv::LineIterator::ptr0

◆ step

int cv::LineIterator::step

The documentation for this class was generated from the following file: