Draw a line using OpenCV in C++ - GeeksforGeeks

27 Jan, 2021
In this article, we will discuss how to draw a line using OpenCV in C++. The idea is to use the line() function from OpenCV C++ library.
Syntax:
line(img, pt1, pt2, color, thickness, lineType, shift)
Parameters:
img: This is the image file.
start: Start point of the line segment. The first point out of two ends of a line segment. It is a tuple of two coordinates (x-coordinate, y-coordinate)).
end: Endpoint of the line segment. The second point out of two ends of a line segment. It is a tuple of two coordinates (x-coordinate, y-coordinate)).
color: Color of the line to be drawn. It is a tuple representing 3 colors (B, G, R) i.e.. (Blue, Green, Red).
thickness: Thickness of the line drawn.
lineType: Type of the line. There are 3 types of line:LINE_4: Line was drawn using 4 connected Bresenham algorithm.LINE_8: Line drawn using 8 connected Bresenham algorithm.LINE_AA: It draws Antialiased lines formed by using the Gaussian filter.
LINE_4: Line was drawn using 4 connected Bresenham algorithm.
LINE_8: Line drawn using 8 connected Bresenham algorithm.
LINE_AA: It draws Antialiased lines formed by using the Gaussian filter.
nshift: It is the Number of fractional bits in the point coordinates.
Return Value: It returns an image.
Program 1:
Below is the program shows how to draw all types of lines over a self-formed background image:
C++
// C++ program for the above approach#include <iostream>#include <opencv2/core/core.hpp>  // Library to include for// drawing shapes#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;  // Driver Codeint main(int argc, char** argv){    // Create a blank image of size    // (500 x 500) with black    // background (B, G, R) : (0, 0, 0)    Mat image(500, 500, CV_8UC3,              Scalar(0, 0, 0));      // Check if the image is created    // successfully    if (!image.data) {        cout << "Could not open or find"             << " the image";          return 0;    }      Point p1(0, 0), p2(100, 0);    Point p3(200, 0), p4(500, 500);    int thickness = 2;      // Line drawn using 8 connected    // Bresenham algorithm    line(image, p1, p4, Scalar(255, 0, 0),         thickness, LINE_8);      // Line drawn using 4 connected    // Bresenham algorithm    line(image, p2, p4, Scalar(0, 255, 0),         thickness, LINE_4);      // Antialiased line    line(image, p3, p4, Scalar(0, 0, 255),         thickness, LINE_AA);      // Show our image inside window    imshow("Output", image);    waitKey(0);      return 0;}
Output:
Program 2:
Below is the program to shows how to draw a line over a loaded image:
C++
// C++ program for the above approach#include <iostream>#include <opencv2/core/core.hpp>  // Library to include for// drawing shapes#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;  // Driver codeint main(int argc, char** argv){    // Path of the image file    Mat image = imread(        "C:/Users/harsh/Downloads/geeks.png",        IMREAD_COLOR);      // Check if the image is loaded    // successfully    if (!image.data) {        std::cout << "Could not open or "                     "find the image";        return 0;    }      Point p1(0, 0), p2(250, 250);    int thickness = 2;      // Line drawn using 8 connected    // Bresenham algorithm    line(image, p1, p2, Scalar(255, 0, 0),         thickness, LINE_8);      // Show our image inside window    imshow("Output", image);    waitKey(0);      return 0;}
Output:
OpenCV
C++
C++ Programs
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Operator Overloading in C++
Polymorphism in C++
Friend class and function in C++
Sorting a vector in C++
Iterators in C++ STL
Header files in C/C++ and its uses
C++ Program for QuickSort
How to return multiple values from a function in C or C++?
Program to print ASCII Value of a character
Sorting a Map by value in C++ STL