En este artículo, discutiremos cómo dibujar una línea usando OpenCV en C++ . La idea es usar la función line() de la biblioteca OpenCV C++.
Sintaxis:
línea (img, pt1, pt2, color, grosor, tipo de línea, cambio)
Parámetros:
- img: Este es el archivo de imagen.
- inicio: punto de inicio del segmento de línea. El primer punto de dos extremos de un segmento de línea. Es una tupla de dos coordenadas (coordenada x, coordenada y)).
- final: punto final del segmento de línea. El segundo punto de dos extremos de un segmento de línea. Es una tupla de dos coordenadas (coordenada x, coordenada y)).
- color: Color de la línea a dibujar. Es una tupla que representa 3 colores (B, G, R), es decir. (Azul, Verde, Rojo).
- grosor: Grosor de la línea dibujada.
- lineType: Tipo de línea. Hay 3 tipos de línea:
- LINE_4: La línea se dibujó utilizando 4 algoritmos de Bresenham conectados .
- LINE_8: Línea dibujada utilizando 8 algoritmos de Bresenham conectados.
- LINE_AA: Dibuja líneas Antialias formadas usando el filtro Gaussiano .
- nshift: Es el Número de bits fraccionarios en las coordenadas del punto.
Valor devuelto: Devuelve una imagen.
Programa 1:
A continuación se muestra el programa que muestra cómo dibujar todo tipo de líneas sobre una imagen de fondo autoformada:
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 Code int 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; }
Producción:
Programa 2:
A continuación se muestra el programa que muestra cómo dibujar una línea sobre una imagen cargada:
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 code int 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; }
Producción:
Publicación traducida automáticamente
Artículo escrito por Captain_JackSparrow y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA