Я использовал там стратегию, похожую на Karpathy, но использовал дополнительную функцию. Как видите, я использую cvClipLine, чтобы обрезать линию до размера изображения, что не является необходимым, но добавляет немного привлекательности.
Также здесь указан множитель как theMult = max (img-> height, img-> width), поэтому мы не получаем числа, которые могут однажды переполниться или что-то в этом роде.
void drawLine(IplImage * img, float line[4], int thickness,CvScalar color)
{
double theMult = max(img->height,img->width);
// calculate start point
CvPoint startPoint;
startPoint.x = line[2]- theMult*line[0];// x0
startPoint.y = line[3] - theMult*line[1];// y0
// calculate end point
CvPoint endPoint;
endPoint.x = line[2]+ theMult*line[0];//x[1]
endPoint.y = line[3] + theMult*line[1];//y[1]
// draw overlay of bottom lines on image
cvClipLine(cvGetSize(img), &startPoint, &endPoint);
cvLine(img, startPoint, endPoint, color, thickness, 8, 0);
}