• 【OpenCV 例程200篇】212. 绘制倾斜的矩形


    OpenCV 例程200篇 总目录


    【youcans 的 OpenCV 例程200篇】212. 绘制倾斜的矩形

    7.1 绘图函数基本参数

    OpenCV提供了绘图功能,可以在图像上绘制直线、矩形、圆、椭圆等各种几何图形。


    函数原型:

    函数 cv.rectangle() 用来在图像上绘制垂直于图像边界的矩形。

    cv.rectangle(img, pt1, pt2, color[, thickness=1, lineType=LINE_8, shift=0]) → img
    
    • 1

    参数说明:

    • img:输入输出图像,允许单通道灰度图像或多通道彩色图像
    • pt1:矩阵第一个点的坐标,(x1, y1) 格式的元组
    • pt2:与 pt1 成对角的矩阵第二个点的坐标,(x2, y2) 格式的元组
    • color:绘图线条的颜色,(b,g,r) 格式的元组,或者表示灰度值的标量
    • thickness:绘制矩形的线宽,默认值 1px,负数表示矩形内部填充
    • lineType:绘制线段的线性,默认为 LINE_8

    例程 A4.3:在图像上绘制倾斜的矩形

    cv.rectangle 只能在图像上绘制垂直于边界的矩形。如果需要绘制倾斜的矩形,则要获得倾斜矩形的各个顶点坐标,通过绘制直线构造成为闭合的矩形。

        # A4.3 在图像上绘制倾斜的矩形
        height, width, channels = 600, 400, 3
        img = np.ones((height, width, channels), np.uint8)*192  # 创建黑色图像 RGB=0
    
        # 围绕矩形中心旋转
        x, y, w, h = (100, 200, 200, 100)  # 左上角坐标 (x,y), 宽度 w,高度 h
        cx, cy = x+w//2, y+h//2  # 矩形中心
        img1 = img.copy()
        cv.circle(img1, (cx,cy), 4, (0,0,255), -1)  # 旋转中心
        angle = [15, 30, 45, 60, 75, 90]  # 旋转角度,顺时针方向
        for i in range(len(angle)):
            ang = angle[i] * np.pi / 180
            x1 = int(cx + (w/2)*np.cos(ang) - (h/2)*np.sin(ang))
            y1 = int(cy + (w/2)*np.sin(ang) + (h/2)*np.cos(ang))
            x2 = int(cx + (w/2)*np.cos(ang) + (h/2)*np.sin(ang))
            y2 = int(cy + (w/2)*np.sin(ang) - (h/2)*np.cos(ang))
            x3 = int(cx - (w/2)*np.cos(ang) + (h/2)*np.sin(ang))
            y3 = int(cy - (w/2)*np.sin(ang) - (h/2)*np.cos(ang))
            x4 = int(cx - (w/2)*np.cos(ang) - (h/2)*np.sin(ang))
            y4 = int(cy - (w/2)*np.sin(ang) + (h/2)*np.cos(ang))
            color = (30*i, 0, 255-30*i)
            cv.line(img1, (x1,y1), (x2,y2), color)
            cv.line(img1, (x2,y2), (x3,y3), color)
            cv.line(img1, (x3,y3), (x4,y4), color)
            cv.line(img1, (x4,y4), (x1,y1), color)
    
        # 围绕矩形左上顶点旋转
        x, y, w, h = (200, 200, 200, 100)  # 左上角坐标 (x,y), 宽度 w,高度 h
        img2 = img.copy()
        cv.circle(img2, (x, y), 4, (0,0,255), -1)  # 旋转中心
        angle = [15, 30, 45, 60, 75, 90, 120, 150, 180, 225]  # 旋转角度,顺时针方向
        for i in range(len(angle)):
            ang = angle[i] * np.pi / 180
            x1, y1 = x, y
            x2 = int(x + w * np.cos(ang))
            y2 = int(y + w * np.sin(ang))
            x3 = int(x + w * np.cos(ang) - h * np.sin(ang))
            y3 = int(y + w * np.sin(ang) + h * np.cos(ang))
            x4 = int(x - h * np.sin(ang))
            y4 = int(y + h * np.cos(ang))
            color = (30 * i, 0, 255 - 30 * i)
            cv.line(img2, (x1, y1), (x2, y2), color)
            cv.line(img2, (x2, y2), (x3, y3), color)
            cv.line(img2, (x3, y3), (x4, y4), color)
            cv.line(img2, (x4, y4), (x1, y1), color)
    
        plt.figure(figsize=(9, 6))
        plt.subplot(121), plt.title("img1"), plt.axis('off')
        plt.imshow(cv.cvtColor(img1, cv.COLOR_BGR2RGB))
        plt.subplot(122), plt.title("img2"), plt.axis('off')
        plt.imshow(cv.cvtColor(img2, cv.COLOR_BGR2RGB))
        plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    例程结果:

    在这里插入图片描述



    【本节完】

    版权声明:
    参考文献: Use the Photoshop Levels adjustment (adobe.com)
    youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125432101)
    Copyright 2022 youcans, XUPT
    Crated:2022-6-20
    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
    欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中

    210. 绘制直线也会有这么多坑?
    211. 绘制垂直矩形
    212. 绘制倾斜的矩形

  • 相关阅读:
    复杂四则运算的中缀表达式转后缀表达式(逆波兰表达式)Java版
    数据结构之时间复杂度与空间复杂度
    【1.2】神经网络:神经元与激活函数
    Java如何安装https证书
    操作系统·八股文背诵版V0.3
    winform打包默认安装路径设置
    Unity—项目小技术总结
    端口渗透篇:Java RMI 远程代码执行漏洞
    支付宝支付对接-附带完整代码!!
    5、程序、进程、线程(一)
  • 原文地址:https://blog.csdn.net/youcans/article/details/125459591