• 【OpenCV】图形绘制与填充


            介绍了绘制、填充图像的API。也介绍了RNG类用来生成随机数。相关API:

    • line()

    • rectangle()

    • circle()

    • ellipse()

    • putText()

    代码:

    1. #include "iostream"
    2. #include "opencv2/opencv.hpp"
    3. using namespace std;
    4. using namespace cv;
    5. int main(int argc, char *argv)
    6. {
    7. //【画布(图片)、窗口创建】
    8. Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
    9. namedWindow("canvas", WINDOW_AUTOSIZE);
    10. //【相关绘制API]】
    11. //线段
    12. line(canvas, Point(10, 10), Point(400, 400), Scalar(0, 255, 255), 1, LINE_8); //API(画布,点,点,色彩,线粗,渲染方式),渲染方式是枚举值,LINE_AA可以实现抗锯齿效果。
    13. //矩形
    14. Rect rect(100, 100, 200, 200); //(起始点位置,宽高)宽高不可为负值
    15. rectangle(canvas, rect, Scalar(255, 0, 0), 1, LINE_8); //API
    16. //圆形
    17. circle(canvas, Point(256, 256), 100, Scalar(0, 255, 0), 1, 8); //API(画布,圆心,半径,色彩,线粗,渲染方式)
    18. //椭圆
    19. RotatedRect rrt; //通过这个对象设置一些矩形数据
    20. rrt.center = Point2f(256, 256); //椭圆中心
    21. rrt.angle = 45; //旋转角度,可以为负值,反向旋转
    22. rrt.size = Size(100, 200); //椭圆尺幅,可以理解为把椭圆圈起来的矩形的大小
    23. ellipse(canvas, rrt, Scalar(0, 255, 255), -1, 8); //API(画布,RotatedRect对象,色彩,线粗,渲染方式),线粗参数设置-1图形变填充。
    24. //文字
    25. putText(canvas, "hello,world", Point(100, 50), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 255, 0), 2, 8); //API(画布,文字,起始点,字体,大小,色彩,粗细,渲染方式)
    26. imshow("canvas", canvas);
    27. //【随机绘制】
    28. /*
    29. Mat image = Mat::zeros(Size(512, 512), CV_8UC3);
    30. Rect rect1;
    31. int x1 = 0, y1 = 0;
    32. int x2 = 0, y2 = 0;
    33. RNG rng(12345); //随机数,参数是设置的种子。
    34. while (true)
    35. {
    36. //把image转变为纯黑图,相当于每次绘制前清空image图片。可以去掉注释运行看看效果。
    37. //image = Scalar(0, 0, 0);
    38. //两个点的x,y取随机值
    39. x1 = rng.uniform(0, 512);//0~511的范围随机,[0,512)
    40. y1 = rng.uniform(0, 512);
    41. x2 = rng.uniform(0, 512);
    42. y2 = rng.uniform(0, 512);
    43. //取两点间宽高
    44. int w = abs(x2 - x1); //取绝对值
    45. int h = abs(y2 - y1);
    46. //画线
    47. line(image, Point(x1, y1), Point(x2, y2), Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)), 1, LINE_8);
    48. //画矩形
    49. rect1.x = x1;
    50. rect1.y = y1;
    51. rect1.width = w;
    52. rect1.height = h;
    53. rectangle(image, rect1, Scalar(255, 0, 0), 1, LINE_8);
    54. imshow("image", image);
    55. //按下任意键(英文输入法)退出循环,停止随机绘制
    56. if (waitKey(10) >= 0)
    57. {
    58. break;
    59. }
    60. }
    61. */
    62. waitKey(0);
    63. destroyAllWindows();
    64. return 0;
    65. }

    除了几个API的使用要了解,还要了解这段代码中用到的各种类对象相关内容。

    • Rect

    • RotatedRect

    • RNG

    • .uniform(),[x,y)

    这里分别用于了矩阵,椭圆的绘制,以及获取随机数。

    演示:

  • 相关阅读:
    视频号创作分成计划揭秘!300+收益轻松拿,幻术视频成爆款!
    ElasticSearch中基础API操作
    Numpy入门[11]——生成数组的函数
    web前端零基础入门5
    什么是相对URL和绝对URL
    【深入浅出Spring6】第一期——入门
    SSM“点点通”餐饮点餐小程序-计算机毕业设计源码11264
    redis-持久化
    从01背包说起(上)
    Java8 新特性之Stream(三)-- Stream的终结操作
  • 原文地址:https://blog.csdn.net/Davidorzs/article/details/139092494