Opencv Line函数学习
看OpenCV时看到自己不常用的Line函数时不禁想到之前每次对图像进行处理都是在已有图片上进行空域或者频域操作完成的,而如果要在图片上画框rect或者画线line是如何做到的呢,既然Line函数并没用可以选择的算法类型,那么用的是DDA或者Bresenham还是哪种方法呢(虽然不可能是DDA哈哈)?出于好奇心去看了OpenCV的源代码。
OpenCV源代码Line函数定义:
static void
Line( Mat& img, Point pt1, Point pt2,
const void* _color, int connectivity = 8 )
{
//必须为8连通或者4连通
if( connectivity == 0 )
connectivity = 8;
else if( connectivity == 1 )
connectivity = 4;
//迭代类
LineIterator iterator(img, pt1, pt2, connectivity, true);
int i, count = iterator.count;//p1,p2点间的像素总数
int pix_size = (int)img.elemSize();//每个元素的数据大小
const uchar* color = (const uchar*)_color;
for( i = 0; i < count; i++, ++iterator )
{
uchar* ptr = *iterator;
if( pix_size == 1 )
ptr[0] = color[0];
else if( pix_size == 3 )
{
ptr[0] = color[0];
ptr[1] = color[1];
ptr[2] = color[2];