OpenCV Series : Target Box Outline Border


角点

c 复制代码
P1      [0]     (255, 000, 000)
P2      [1]     (000, 255, 000)
P3      [2]     (000, 000, 255)
P4      [3]     (000, 000, 000)


垂直矩形框

c 复制代码
	rect = cv2.minAreaRect(cnt)
	targetColor = roi_color
	targetThickness = 1
	targetColor = (255, 255, 255)
	if lineVerbose:
		if True:
		   cv2.line(photo,  (x, y), (x+w//4, y), targetColor, targetThickness)
		   cv2.line(photo,  (x, y), (x, y+h//4), targetColor, targetThickness)
		
		   cv2.line(photo,  (x+3*w//4, y), (x+w, y), targetColor, targetThickness)
		   cv2.line(photo,  (x+w, y), (x+w, y+h//4), targetColor, targetThickness)
		
		   cv2.line(photo,  (x, y+h), (x+w//4, y+h), targetColor, targetThickness)
		   cv2.line(photo,  (x, y+h), (x, y+3*h//4), targetColor, targetThickness)
		
		   cv2.line(photo,  (x+w, y+h), (x+3*w//4, y+h), targetColor, targetThickness)
		   cv2.line(photo,  (x+w, y+h), (x+w, y+3*h//4), targetColor, targetThickness)
		
		   crossLength = 15
		   cv2.line(photo,  (x+w//2-crossLength, y+h//2), (x+w//2+crossLength, y+h//2), targetColor, targetThickness)
		   cv2.line(photo,  (x+w//2, y+h//2-crossLength), (x+w//2, y+h//2+crossLength), targetColor, targetThickness)



倾斜矩形框

c 复制代码
def lineByAngle(photo, p1, p2, length, color, thickness):
    slope = 0 + (p2[1] - p1[1]) / (p2[0] - p1[0])
    theta = np.arctan(slope)
    degree = int(theta * 57.29577) % 360

    length = getDistance(p1, p2) // 4

    if (p2[0] < p1[0]):
        pp = (
            int(p1[0] - length * np.cos(theta)),
            int(p1[1] - length * np.sin(theta))
        )
    else:
        pp = (
            int(p1[0] + length * np.cos(theta)),
            int(p1[1] + length * np.sin(theta))
        )
    cv2.line(photo,  p1, pp, color, thickness)


几何关键点

c 复制代码
	if True:
	    cv2.circle(photo, p1, 1, roi_red, 5)
	    cv2.circle(photo, p2, 1, roi_red, 5)
	    cv2.circle(photo, p3, 1, roi_red, 5)
	    cv2.circle(photo, p4, 1, roi_red, 5)
	
	    center = (int((p1[0] + p3[0]) / 2), int((p2[1] + p4[1]) / 2))
	    cv2.circle(photo, center, 1, roi_green, 5)
c 复制代码
def slopeAngle(p1, p2):
    slope  = (p2[1] - p1[1]) / (p2[0] - p1[0])
    theta  = np.arctan(slope)
    degree = int(theta * 57.29577) % 360
    return theta

def lineByPoint(photo, pp, theta, length, color, thickness):
    if True:
        p1 = (
            int(pp[0] - length * math.cos(theta)),
            int(pp[1] - length * math.sin(theta))
        )
c 复制代码
     center = (int((p1[0] + p3[0]) / 2), int((p2[1] + p4[1]) / 2))
     if not True:
         cv2.circle(photo, p1, 1, roi_blue,  5)
         cv2.circle(photo, p2, 1, roi_green, 5)
         cv2.circle(photo, p3, 1, roi_red,   5)
         cv2.circle(photo, p4, 1, roi_black, 5)
         cv2.circle(photo, center, 1, roi_green, 5)
     if True:
         crossLength = 15
         theta = slopeAngle(p1, p2)
         lineByPoint(photo, center, theta, crossLength, targetColor, targetThickness)
         theta = slopeAngle(p2, p3)
         lineByPoint(photo, center, theta, crossLength, targetColor, targetThickness)


Automatic Mask

c 复制代码
if True:
    matrix = np.array(cnt)
    for i in range(len(matrix)):
        matrix[i][0][0] = matrix[i][0][0] - x
        matrix[i][0][1] = matrix[i][0][1] - y
    mask = np.zeros(characteristic.shape[:2], dtype=np.uint8)
    mask = cv2.fillPoly(mask, [matrix], 255)
    cv2.imshow('Mask', mask)

    image = cv2.bitwise_and(characteristic, characteristic, mask = mask)
    image = stretch(image)
    cv2.imshow('Masked', image)
相关推荐
weixin_437497775 小时前
读书笔记:Context Engineering 2.0 (上)
人工智能·nlp
喝拿铁写前端5 小时前
前端开发者使用 AI 的能力层级——从表面使用到工程化能力的真正分水岭
前端·人工智能·程序员
goodfat5 小时前
Win11如何关闭自动更新 Win11暂停系统更新的设置方法【教程】
人工智能·禁止windows更新·win11优化工具
北京领雁科技6 小时前
领雁科技反洗钱案例白皮书暨人工智能在反洗钱系统中的深度应用
人工智能·科技·安全
落叶,听雪6 小时前
河南建站系统哪个好
大数据·人工智能·python
清月电子6 小时前
杰理AC109N系列AC1082 AC1074 AC1090 芯片停产替代及资料说明
人工智能·单片机·嵌入式硬件·物联网
Dev7z6 小时前
非线性MPC在自动驾驶路径跟踪与避障控制中的应用及Matlab实现
人工智能·matlab·自动驾驶
七月shi人6 小时前
AI浪潮下,前端路在何方
前端·人工智能·ai编程
橙汁味的风6 小时前
1隐马尔科夫模型HMM与条件随机场CRF
人工智能·深度学习·机器学习
itwangyang5207 小时前
AIDD-人工智能药物设计-AI 制药编码之战:预测癌症反应,选对方法是关键
人工智能