用cv2计算图片中直线的角度

用cv2计算图片中直线的角度,第1张

背景描述

如下图所示,在这幅图片中有一条直线。我想通过cv2求得这条直线的角度。这张图片的形状shape为:(300,300,1)

代码实现

这里使用python语言,引用cv2和numpy两个库来完成。

#coding:utf-8
import cv2
import numpy as np

#定义图形的形状
shape = (300,300,1)
#形成一个白底的正方形图片
src = np.full(shape,fill_value=255,dtype=np.uint8)
#形成一个黑底的正方形图片
temp = np.zeros(shape,dtype=np.uint8)
center = (int(shape[0]/2),int(shape[1]/2))
length = 120
angle = 30

#根据直线的圆心、长度和角度,求直线的终点
def endpoint(center,length,angle):
    endx = int(center[0]+length*np.cos(np.deg2rad(angle)))
    endy = int(center[1]+length*np.sin(np.deg2rad(angle)))
    return (endx,endy)

end = endpoint(center,length,angle)
#在白色图片上画一条顺时针旋转30度的直线,颜色为黑色
cv2.line(src,center,end,0,3)

#通过360度旋转寻找这条直线,判断条件为黑色点数最多的角度,旋转的步进为1度
angle_list =[]
for angle in range(0,360):
    temp_new = temp.copy()
    cv2.line(temp_new,center,endpoint(center,length,angle),255,3)
    src_new = src[temp_new==255]
    points = len(src_new[src_new==0])
    angle_list.append((points,angle))
    cv2.imshow('temp_new',temp_new)
    cv2.imshow('src',src)
    cv2.imshow('temp',temp)
    cv2.waitKey(1)
    
#打印每个角度的黑点数量
print(angle_list)
#计算求得的角度
ang = max(angle_list,key=lambda x:x[0])[1]
print(f'这条线的角度为{ang}度。')
输出结果

这条线的角度为30度。
这个是转圈统计黑色点的个数的列表,30度的点数为608,在这个列表中为黑色点数最多的角度。
[(31, 0), (31, 1), (31, 2), (32, 3), (34, 4), (35, 5), (36, 6), (37, 7), (38, 8), (40, 9), (40, 10), (42, 11), (44, 12), (46, 13), (48, 14), (57, 15), (60, 16), (64, 17), (67, 18), (73, 19), (80, 20), (87, 21), (92, 22), (104, 23), (119, 24), (141, 25), (174, 26), (224, 27), (329, 28), (467, 29), (608, 30), (525, 31), (391, 32), (266, 33), (197, 34), (171, 35), (140, 36), (116, 37), (108, 38), (95, 39), (84, 40), (80, 41), (59, 42), (54, 43), (53, 44), (41, 45), (41, 46), (42, 47), (41, 48), (40, 49), (39, 50), (38, 51), (37, 52), (36, 53), (35, 54), (34, 55), (33, 56), (33, 57), (32, 58), (32, 59), (31, 60), (31, 61), (29, 62), (29, 63), (29, 64), (29, 65), (28, 66), (28, 67), (27, 68), (27, 69), (27, 70), (27, 71), (27, 72), (26, 73), (25, 74), (25, 75), (22, 76), (22, 77), (22, 78), (22, 79), (21, 80), (21, 81), (21, 82), (20, 83), (20, 84), (20, 85), (20, 86), (20, 87), (20, 88), (20, 89), (20, 90), (20, 91), (20, 92), (20, 93), (20, 94), (20, 95), (20, 96), (19, 97), (19, 98), (18, 99), (18, 100), (18, 101), (18, 102), (17, 103), (18, 104), (18, 105), (18, 106), (18, 107), (18, 108), (18, 109), (17, 110), (17, 111), (17, 112), (17, 113), (17, 114), (17, 115), (17, 116), (17, 117), (17, 118), (17, 119), (17, 120), (16, 121), (16, 122), (16, 123), (16, 124), (16, 125), (16, 126), (16, 127), (16, 128), (16, 129), (16, 130), (16, 131), (15, 132), (15, 133), (14, 134), (14, 135), (14, 136), (14, 137), (14, 138), (15, 139), (15, 140), (15, 141), (15, 142), (15, 143), (15, 144), (15, 145), (15, 146), (15, 147), (15, 148), (15, 149), (15, 150), (15, 151), (15, 152), (15, 153), (15, 154), (15, 155), (15, 156), (15, 157), (15, 158), (15, 159), (15, 160), (15, 161), (15, 162), (15, 163), (15, 164), (15, 165), (14, 166), (14, 167), (14, 168), (14, 169), (14, 170), (14, 171), (14, 172), (14, 173), (14, 174), (14, 175), (14, 176), (14, 177), (14, 178), (14, 179), (14, 180), (14, 181), (14, 182), (14, 183), (14, 184), (14, 185), (14, 186), (14, 187), (14, 188), (14, 189), (14, 190), (14, 191), (14, 192), (14, 193), (14, 194), (15, 195), (15, 196), (15, 197), (15, 198), (15, 199), (15, 200), (15, 201), (15, 202), (15, 203), (15, 204), (15, 205), (15, 206), (15, 207), (15, 208), (15, 209), (15, 210), (15, 211), (15, 212), (15, 213), (15, 214), (15, 215), (15, 216), (15, 217), (15, 218), (15, 219), (15, 220), (15, 221), (13, 222), (13, 223), (13, 224), (13, 225), (13, 226), (14, 227), (14, 228), (15, 229), (15, 230), (15, 231), (15, 232), (15, 233), (15, 234), (15, 235), (15, 236), (15, 237), (15, 238), (15, 239), (15, 240), (15, 241), (15, 242), (15, 243), (15, 244), (15, 245), (15, 246), (15, 247), (15, 248), (15, 249), (15, 250), (15, 251), (15, 252), (15, 253), (15, 254), (15, 255), (15, 256), (15, 257), (15, 258), (15, 259), (15, 260), (15, 261), (15, 262), (15, 263), (15, 264), (15, 265), (15, 266), (15, 267), (15, 268), (15, 269), (15, 270), (15, 271), (15, 272), (15, 273), (15, 274), (15, 275), (15, 276), (15, 277), (15, 278), (15, 279), (15, 280), (15, 281), (15, 282), (15, 283), (15, 284), (16, 285), (16, 286), (17, 287), (17, 288), (17, 289), (17, 290), (17, 291), (17, 292), (17, 293), (17, 294), (17, 295), (17, 296), (17, 297), (17, 298), (17, 299), (17, 300), (17, 301), (17, 302), (17, 303), (17, 304), (17, 305), (17, 306), (17, 307), (17, 308), (17, 309), (17, 310), (17, 311), (16, 312), (16, 313), (16, 314), (16, 315), (16, 316), (18, 317), (18, 318), (20, 319), (20, 320), (20, 321), (21, 322), (21, 323), (21, 324), (21, 325), (21, 326), (21, 327), (21, 328), (21, 329), (21, 330), (21, 331), (21, 332), (21, 333), (21, 334), (21, 335), (21, 336), (22, 337), (22, 338), (22, 339), (22, 340), (23, 341), (24, 342), (24, 343), (24, 344), (25, 345), (25, 346), (24, 347), (25, 348), (25, 349), (25, 350), (25, 351), (26, 352), (26, 353), (27, 354), (28, 355), (29, 356), (31, 357), (31, 358), (31, 359)]

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/715233.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-25
下一篇2022-04-25

发表评论

登录后才能评论

评论列表(0条)

    保存