InitLineIterator

InitLineIterator
InitLineIterator 初始化線段疊代器 int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2, CvLineIterator* line_iterator, int connectivity=8 ); image 帶采線段的輸入圖像. pt1 線段起始點 pt2 線段結束點 line_iterator 指向線段疊代器狀態結構的指針 connectivity 被掃描線段的連通數,4 或 8. 函式 cvInitLineIterator 初始化線段疊代器,並返回兩點之間的象素點數目。兩個點必須在圖像內。當疊代器初始化後,連線兩點的光柵線上所有點,都可以連續通過調用 CV_NEXT_LINE_POINT 來得到。線段上的點是使用 4-連通或8-連通利用 Bresenham 算法逐點計算的。 例子:使用線段疊代器計算彩色線上象素值的和
CvScalar sum_line_pixels( IplImage* image, CvPoint pt1, CvPoint pt2 )
{
CvLineIterator iterator; int blue_sum = 0, green_sum = 0, red_sum = 0;
int count = cvInitLineIterator( image, pt1, pt2, &iterator, 8 );
for( int i = 0; i < count; i++ )
{
blue_sum += iterator.ptr[0];
green_sum += iterator.ptr[1];
red_sum += iterator.ptr[2];
CV_NEXT_LINE_POINT(iterator);
/* print the pixel coordinates: demonstrates how to calculate the coordinates */
{
int offset, x, y;
/* assume that ROI is not set, otherwise need to take it into account. */
offset = iterator.ptr - (uchar*)(image->imageData);
y = offset/image->widthStep;
x = (offset - y*image->widthStep)/(3*sizeof(uchar)
/* size of pixel */);
printf("(%d,%d)\n", x, y );
}
}
return cvScalar( blue_sum, green_sum, red_sum );
}

相關詞條

熱門詞條

聯絡我們