OpenCV-python 自制图片画框脚本

自制图片画框

import cv2 as cv

调用函数,输入图片路径

rect_oneimg=setRectsInOneImg(imgpath)

单张图片画多个框,用到了后面画单个框的函数 setOneRect

def setRectsInOneImg(imgpath):
    """
    返回一张图片所有的矩形框
    返回格式:   [[(x0,y0),(x1,y1)],
                [(x0,y0),(x1,y1)],
                [(x0,y0),(x1,y1)],]
    """
    rects = [] #一个图片的所有矩形的两个顶点
    srcimg = cv.imread(imgpath)
    while True:
        rect = setOneRect(srcimg,rects)
        if rect !=[(),()]:
            rects.append(rect)
            print(rects)
        else:
            break
    return rects

画单个框

def setOneRect(img,rects=None):
    """
    在一张图片上画一个矩形,可以重复画,按回车确认所画矩形
    如果直接回车返回空
    """
    if rects is not None:
        img = drawRectOnImg(img,rects)
    windowName = 'img'
    global p0,p1
    p0, p1=(),()
    def draw_circle(event, x, y, flags, param):
        global p0,p1
        # imgcopy=img
        imgcopy=img.copy()
        if event == cv.EVENT_LBUTTONDOWN:
            p0 = (x, y)
            print('起点:{}'.format(p0))
            cv.circle(imgcopy,p0,radius,red,thickness)
            cv.imshow(windowName,imgcopy)
        elif event==cv.EVENT_MOUSEMOVE and (flags&cv.EVENT_LBUTTONDOWN):
            cv.rectangle(imgcopy,p0,(x,y),red,thickness=thickness)
            cv.imshow(windowName,imgcopy)
        elif event == cv.EVENT_LBUTTONUP:
            p1=(x,y)
            print('终点:{}'.format(p1))
            cv.rectangle(imgcopy,p0,p1,red,thickness=thickness)
            cv.imshow(windowName,imgcopy)
    cv.namedWindow(windowName)
    cv.imshow(windowName, img)
    cv.moveWindow(windowName, -1400, 0)
    cv.setMouseCallback(windowName, draw_circle)
    key = cv.waitKey(0)
    if key == 13:  # Enter
        rect=[p0,p1]
        print('返回:{}'.format(rect))
        return rect
    else:
        print('重试!')
        return setOneRect(img,rects)

其中用到了鼠标点击图片的响应,具体可以参考:
OpenCV-python 用鼠标在图片上标记位置并返回坐标

你可能感兴趣的:(Python,OpenCV,python,opencv,cv)