日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字

發(fā)布時間:2025/7/25 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OpenCV在圖像上隨機畫直線、橢圓、多邊形、圓、顯示文字

代碼如下:

/*** @file Drawing_2.cpp* @brief Simple sample code*/#include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> #include <iostream> #include <stdio.h>using namespace cv;/// Global Variables const int NUMBER = 100; const int DELAY = 5;const int window_width = 900; const int window_height = 600; int x_1 = -window_width/2; int x_2 = window_width*3/2; int y_1 = -window_width/2; int y_2 = window_width*3/2;/// Function headers static Scalar randomColor( RNG& rng ); int Drawing_Random_Lines( Mat image, char* window_name, RNG rng ); int Drawing_Random_Rectangles( Mat image, char* window_name, RNG rng ); int Drawing_Random_Ellipses( Mat image, char* window_name, RNG rng ); int Drawing_Random_Polylines( Mat image, char* window_name, RNG rng ); int Drawing_Random_Filled_Polygons( Mat image, char* window_name, RNG rng ); int Drawing_Random_Circles( Mat image, char* window_name, RNG rng ); int Displaying_Random_Text( Mat image, char* window_name, RNG rng ); int Displaying_Big_End( Mat image, char* window_name, RNG rng );/*** @function main*/ int main( void ) {int c;/// Start creating a windowchar window_name[] = "Drawing_2 Tutorial";/// Also create a random object (RNG)RNG rng( 0xFFFFFFFF );/// Initialize a matrix filled with zerosMat image = Mat::zeros( window_height, window_width, CV_8UC3 );/// Show it in a window during DELAY msimshow( window_name, image );waitKey( DELAY );/// 畫線c = Drawing_Random_Lines(image, window_name, rng);if( c != 0 ) return 0;/// 矩形c = Drawing_Random_Rectangles(image, window_name, rng);if( c != 0 ) return 0;/// 橢圓c = Drawing_Random_Ellipses( image, window_name, rng );if( c != 0 ) return 0;/// 多邊形c = Drawing_Random_Polylines( image, window_name, rng );if( c != 0 ) return 0;/// 填充的多邊形c = Drawing_Random_Filled_Polygons( image, window_name, rng );if( c != 0 ) return 0;/// 圓c = Drawing_Random_Circles( image, window_name, rng );if( c != 0 ) return 0;/// 隨機位置顯示文本c = Displaying_Random_Text( image, window_name, rng );if( c != 0 ) return 0;/// 顯示文字c = Displaying_Big_End( image, window_name, rng );if( c != 0 ) return 0;waitKey(0);return 0; }/// Function definitions/*** @function randomColor* @brief Produces a random color given a random object*/ static Scalar randomColor( RNG& rng ) {int icolor = (unsigned) rng;return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 ); }/*** @function 隨機畫線*/ int Drawing_Random_Lines( Mat image, char* window_name, RNG rng ) {Point pt1, pt2;for( int i = 0; i < NUMBER; i++ ){pt1.x = rng.uniform( x_1, x_2 );pt1.y = rng.uniform( y_1, y_2 );pt2.x = rng.uniform( x_1, x_2 );pt2.y = rng.uniform( y_1, y_2 );line( image, pt1, pt2, randomColor(rng), rng.uniform(1, 10), 8 );imshow( window_name, image );if( waitKey( DELAY ) >= 0 ){ return -1; }}return 0; }/*** @function 畫矩形*/ int Drawing_Random_Rectangles( Mat image, char* window_name, RNG rng ) {Point pt1, pt2;int lineType = 8;int thickness = rng.uniform( -3, 10 );for( int i = 0; i < NUMBER; i++ ){pt1.x = rng.uniform( x_1, x_2 );pt1.y = rng.uniform( y_1, y_2 );pt2.x = rng.uniform( x_1, x_2 );pt2.y = rng.uniform( y_1, y_2 );rectangle( image, pt1, pt2, randomColor(rng), MAX( thickness, -1 ), lineType );imshow( window_name, image );if( waitKey( DELAY ) >= 0 ){ return -1; }}return 0; }/*** @function 隨機橢圓*/ int Drawing_Random_Ellipses( Mat image, char* window_name, RNG rng ) {int lineType = 8;for ( int i = 0; i < NUMBER; i++ ){Point center;center.x = rng.uniform(x_1, x_2);center.y = rng.uniform(y_1, y_2);Size axes;axes.width = rng.uniform(0, 200);axes.height = rng.uniform(0, 200);double angle = rng.uniform(0, 180);ellipse( image, center, axes, angle, angle - 100, angle + 200,randomColor(rng), rng.uniform(-1,9), lineType );imshow( window_name, image );if( waitKey(DELAY) >= 0 ){ return -1; }}return 0; }/*** @function 多邊形*/ int Drawing_Random_Polylines( Mat image, char* window_name, RNG rng ) {int lineType = 8;for( int i = 0; i< NUMBER; i++ ){Point pt[2][3];pt[0][0].x = rng.uniform(x_1, x_2);pt[0][0].y = rng.uniform(y_1, y_2);pt[0][1].x = rng.uniform(x_1, x_2);pt[0][1].y = rng.uniform(y_1, y_2);pt[0][2].x = rng.uniform(x_1, x_2);pt[0][2].y = rng.uniform(y_1, y_2);pt[1][0].x = rng.uniform(x_1, x_2);pt[1][0].y = rng.uniform(y_1, y_2);pt[1][1].x = rng.uniform(x_1, x_2);pt[1][1].y = rng.uniform(y_1, y_2);pt[1][2].x = rng.uniform(x_1, x_2);pt[1][2].y = rng.uniform(y_1, y_2);const Point* ppt[2] = {pt[0], pt[1]};int npt[] = {3, 3};polylines(image, ppt, npt, 2, true, randomColor(rng), rng.uniform(1,10), lineType);imshow( window_name, image );if( waitKey(DELAY) >= 0 ){ return -1; }}return 0; }/*** @function 填充的多邊形*/ int Drawing_Random_Filled_Polygons( Mat image, char* window_name, RNG rng ) {int lineType = 8;for ( int i = 0; i < NUMBER; i++ ){Point pt[2][3];pt[0][0].x = rng.uniform(x_1, x_2);pt[0][0].y = rng.uniform(y_1, y_2);pt[0][1].x = rng.uniform(x_1, x_2);pt[0][1].y = rng.uniform(y_1, y_2);pt[0][2].x = rng.uniform(x_1, x_2);pt[0][2].y = rng.uniform(y_1, y_2);pt[1][0].x = rng.uniform(x_1, x_2);pt[1][0].y = rng.uniform(y_1, y_2);pt[1][1].x = rng.uniform(x_1, x_2);pt[1][1].y = rng.uniform(y_1, y_2);pt[1][2].x = rng.uniform(x_1, x_2);pt[1][2].y = rng.uniform(y_1, y_2);const Point* ppt[2] = {pt[0], pt[1]};int npt[] = {3, 3};fillPoly( image, ppt, npt, 2, randomColor(rng), lineType );imshow( window_name, image );if( waitKey(DELAY) >= 0 ){ return -1; }}return 0; }/*** @function 圓*/ int Drawing_Random_Circles( Mat image, char* window_name, RNG rng ) {int lineType = 8;for (int i = 0; i < NUMBER; i++){Point center;center.x = rng.uniform(x_1, x_2);center.y = rng.uniform(y_1, y_2);circle( image, center, rng.uniform(0, 300), randomColor(rng),rng.uniform(-1, 9), lineType );imshow( window_name, image );if( waitKey(DELAY) >= 0 ){ return -1; }}return 0; }/*** @function 顯示文本*/ int Displaying_Random_Text( Mat image, char* window_name, RNG rng ) {int lineType = 8;for ( int i = 1; i < NUMBER; i++ ){Point org;org.x = rng.uniform(x_1, x_2);org.y = rng.uniform(y_1, y_2);putText( image, "Testing text rendering", org, rng.uniform(0,8),rng.uniform(0,100)*0.05+0.1, randomColor(rng), rng.uniform(1, 10), lineType);imshow( window_name, image );if( waitKey(DELAY) >= 0 ){ return -1; }}return 0; }顯示文本Displaying_Big_End*/ int Displaying_Big_End( Mat image, char* window_name, RNG ) {Size textsize = getTextSize("OpenCV forever!", FONT_HERSHEY_COMPLEX, 3, 5, 0);Point org((window_width - textsize.width)/2, (window_height - textsize.height)/2);int lineType = 8;Mat image2;for( int i = 0; i < 255; i += 2 ){image2 = image - Scalar::all(i);putText( image2, "OpenCV forever!", org, FONT_HERSHEY_COMPLEX, 3,Scalar(i, i, 255), 5, lineType );imshow( window_name, image2 );if( waitKey(DELAY) >= 0 ){ return -1; }}return 0; }
結果:

  • 隨機畫線:

  • 矩形和橢圓
  • 多邊形

  • 填充的多邊形(三角形)和圓
  • 最后,"Testing Text Rendering"*將會以不同的字體,大小、顏色出現在不同的位置.最后,顯示”O(jiān)penCV forever!“
  •    


      
      




    總結

    以上是生活随笔為你收集整理的OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。