精华内容
下载资源
问答
  • # 基本逻辑:鼠标按下松开,获取坐标,绘制矩形等------未看明白如何获取到的初始坐标和结束坐标,x,y从哪获取的值 import numpy as np import cv2 drawing = False # 鼠标按下为真 mode = True # 如果为真,画矩形...
    # 程序功能鼠标按下,拖拽生成矩形框
    # 缺陷:拖过的区域涂黑,而且不彻底--后期换写法测试
    # 基本逻辑:鼠标按下松开,获取坐标,绘制矩形等------未看明白如何获取到的初始坐标和结束坐标,x,y从哪获取的值
    import numpy as np
    import cv2
    
    drawing = False  # 鼠标按下为真
    mode = True  # 如果为真,画矩形,按m切换为曲线
    ix, iy = -1, -1
    px, py = -1, -1
    
    
    def draw_circle(event, x, y, flags, param):
        global ix, iy, drawing, px, py
    
        if event == cv2.EVENT_LBUTTONDOWN:
            drawing = True
            ix, iy = x, y
        elif event == cv2.EVENT_MOUSEMOVE:
            if drawing == True:
                cv2.rectangle(img, (ix, iy), (px, py), (0, 0, 0), 0)  # 将刚刚拖拽的矩形涂黑
                cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 0)
                px, py = x, y
        elif event == cv2.EVENT_LBUTTONUP:
            drawing = False
            cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 0)
            px, py = -1, -1
    
    
    img = np.zeros((512, 512, 3), np.uint8)
    cv2.namedWindow('image')
    cv2.setMouseCallback('image', draw_circle)
    
    while (1):
        cv2.imshow('image', img)
        k = cv2.waitKey(1) & 0xFF
        if k == ord('q'):
            break
        elif k == 27:
            break
    cv2.destroyAllWindows()
    
    '''import numpy as np
    import cv2
    
    drawing = False #鼠标按下为真
    mode = True #如果为真,画矩形,按m切换为曲线
    ix,iy=-1,-1
    
    def draw_circle(event,x,y,flags,param):
        global ix,iy,drawing,mode
    
        if event == cv2.EVENT_LBUTTONDOWN:
            drawing = True
            ix,iy=x,y
    
        elif event == cv2.EVENT_MOUSEMOVE:
            if drawing == True:
                if mode == True:
                    cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
                else:
                    cv2.circle(img,(x,y),5,(0,0,255),-1)
        elif event == cv2.EVENT_LBUTTONUP:
            drawing = False
            if mode == True:
                cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv2.circle(img,(x,y),5,(0,0,255),-1)
    
    
    img = np.zeros((512,512,3),np.uint8)
    cv2.namedWindow('image')
    cv2.setMouseCallback('image',draw_circle)
    
    while(1):
        cv2.imshow('image',img)
        k = cv2.waitKey(1) & 0xFF
        if k == ord('m') :
            mode = not mode 
        elif k == 27:
            break
    cv2.destroyAllWindows()'''
    

     

    展开全文
  • 按住鼠标左键即可绘制出一个长方形,而同时按住shift键则可绘制出正方形。 默认绘制出的矩形是自带填充色,双击图片或点击软件上方菜单栏中的“对象填充/线条颜色”可修改填充颜色。 选择对象工具后,在矩形处右击...

    我们在编写PDF文档时,除了文字和图片外,有时还需要用到一些矩形、圆形等几何图形要怎么操作呢?

    首先用极速PDF编辑器打开PDF文档或新建一个页面后,在软件左下角的画图工具中即可找到矩形工具。
    在这里插入图片描述

    注:如果没有看到此排工具栏则只需要在菜单栏任意处右击并勾选“画图和导航”取消隐藏即可。
    在这里插入图片描述

    按住鼠标左键即可绘制出一个长方形,而同时按住shift键则可绘制出正方形。

    默认绘制出的矩形是自带填充色,双击图片或点击软件上方菜单栏中的“对象填充/线条颜色”可修改填充颜色。
    在这里插入图片描述

    选择对象工具后,在矩形处右击并选择边框,可以为矩形添加边框。
    在这里插入图片描述

    或点击画图工具中的“边框切换”工具也可给矩形添加或移除边框。
    在这里插入图片描述

    如需插入圆形或其他不规则多边形可选择画图工具中对应工具操作即可。

    展开全文
  • 本源代码主要演示Delphi7利用鼠标绘制矩形焦点,画出虚线框矩形,按住鼠标左键抖动矩形区域,即可显示虚线矩形框,可应用于需要拖动选择对象时作为选区使用,Delphi中,这个功能使用Canvas实现:  procedure ...
  • 感兴趣区域传统绘制: opencv学习笔记5:感兴趣区域ROI opencv 鼠标事件 1.opencv 鼠标事件类型 import cv2 d=[i for i in dir(cv2) if 'EVENT' in i] print(d) 'EVENT_FLAG_ALTKEY':代表拖拽事件。按住alt键不放...

    基础版笔记传送门:
    python3+opencv学习笔记汇总目录(适合基础入门学习)
    进阶版笔记目录:
    python+opencv进阶版学习笔记目录(适合有一定基础)

    感兴趣区域传统绘制:
    opencv学习笔记5:感兴趣区域ROI

    opencv 鼠标事件

    1.opencv 鼠标事件类型

    import cv2
    
    d=[i for i in dir(cv2) if 'EVENT' in i]
    print(d)
    
    'EVENT_FLAG_ALTKEY':代表拖拽事件。按住alt键不放
    'EVENT_FLAG_CTRLKEY'按住ctrl键不放
    'EVENT_FLAG_LBUTTON'按住左键拖拽
    'EVENT_FLAG_MBUTTON'中键拖拽
    'EVENT_FLAG_RBUTTON'右键拖拽
    'EVENT_FLAG_SHIFTKEY'按住shift不放
    'EVENT_LBUTTONDBLCLK'event鼠标事件。左键双击
    'EVENT_LBUTTONDOWN'按下左键
    'EVENT_LBUTTONUP'释放左键
     'EVENT_MBUTTONDBLCLK' 中键双击
     'EVENT_MBUTTONDOWN'中键点击
     'EVENT_MBUTTONUP'中键放开
     'EVENT_MOUSEHWHEEL'
     'EVENT_MOUSEMOVE'滑动
     'EVENT_MOUSEWHEEL',
     'EVENT_RBUTTONDBLCLK',右键双击
     'EVENT_RBUTTONDOWN',右键点击
     'EVENT_RBUTTONUP'右键释放
    

    2.opencv回调函数

    cv2.setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)
    
    winname:窗口的名字 
    onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);
    userdate:传给回调函数的参数 
    

    响应函数

    void on_Mouse(int event, int x, int y, int flags, void* param);
    event是 CV_EVENT_*变量之一
    x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系) 
    flags是CV_EVENT_FLAG的组合, param是用户定义的传递到setMouseCallback函数调用的参数。
    
    

    opencv 绘图函数

    1绘制直线
    cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
    参数:图像名,起点,终点,颜色,笔宽/px

    import numpy as np
    import cv2
    # Create a black image
    img = np.zeros((512, 512, 3), np.uint8)
    # Draw a diagonal blue line with thickness of 5 px
    cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    2绘制矩形
    cv2.rectangle(img,(104,50),(300,128),(0,255,0),5)
    参数:图像名,左上角,右下角,颜色,笔粗细

    import numpy as np
    import cv2
    # Create a black image
    img = np.zeros((400, 400, 3), np.uint8)
    cv2.rectangle(img,(104,50),(300,128),(0,255,0),5)
    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    3绘制圆形
    cv2.circle(img,中心点(x,y), 半径, 颜色(0,255,255), -1或1)
    参数:图像名,中心点,半径,颜色。-1是绘制真个圆,1边框。

    import numpy as np
    import cv2
    # Create a black image
    img = np.zeros((400, 400, 3), np.uint8)
    cv2.circle(img,(100,63), 63, (0,255,255), -1)
    cv2.circle(img,(300,63), 63, (0,0,255), 1)
    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    4绘制椭圆

    cv2.ellipse(img,(256,256),(100,50),0,0,120,(0,0,255),-1)
    参数:
    中心点坐标:如(256,256)
    长轴和短轴长度:如(100,50)
    夹角椭圆在逆时针方向旋转的角度:如0
    起始角和端角表示从主轴顺时针方向测量的椭圆弧的开始和结束:如 0,120
    颜色:如(0,0,255)
    整个还是轮廓:-1表示整个椭圆,1表示轮廓

    import numpy as np
    import cv2
    # Create a black image
    img = np.zeros((400, 400, 3), np.uint8)
    cv2.ellipse(img,(256,256),(100,50),0,0,120,(0,0,255),-1)
    cv2.ellipse(img,(120,120),(100,50),0,0,360,(0,255,255),1)
    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    5绘制多边形
    pts = np.array([[50,30],[150,30],[200,80],[40,90]], np.int32)
    传入的是几个点的坐标,可以有很多点。

    import numpy as np
    import cv2
    # Create a black image
    img = np.zeros((400, 400, 3), np.uint8)
    pts = np.array([[50,30],[150,30],[200,80],[40,90]], np.int32)
    pts = pts.reshape((-1,1,2))
    cv2.polylines(img,[pts],True,(0,0,255))
    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    使用鼠标在图片上绘制矩形框

    绘制一个矩形框 方法1
    这段代码有借鉴其他博客

    import cv2
    
    global img
    global point1, point2
    
    #鼠标响应函数
    def Rectangular_box(event, x, y, flags, param):
        global img, point1, point2
        img2 = img.copy()
        if event == cv2.EVENT_LBUTTONDOWN:  # 左键点击
            point1 = (x, y)
            cv2.circle(img2, point1, 10, (0, 255, 0), 5)
            cv2.imshow('img', img2)
        elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON):  # 按住左键拖曳
            cv2.rectangle(img2, point1, (x, y), (255, 0, 0), 5)
            cv2.imshow('img', img2)
        elif event == cv2.EVENT_LBUTTONUP:  # 左键释放
            point2 = (x, y)
            cv2.rectangle(img2, point1, point2, (0, 255, 255), 4)
            cv2.imshow('img', img2)
            min_x = min(point1[0], point2[0])
            min_y = min(point1[1], point2[1])
            width = abs(point1[0] - point2[0])
            height = abs(point1[1] - point2[1])
            cut_img = img[min_y:min_y + height, min_x:min_x + width]
            #cv2.imwrite('baocun.jpg', cut_img)
            cv2.imshow('result',cut_img
    def main():
        global img
        img = cv2.imread('yangmi.jpg')
        img=cv2.resize(img,None,fx=0.4,fy=0.4)
        cv2.namedWindow('image')
        cv2.setMouseCallback('image', Rectangular_box)
        cv2.imshow('image', img)
        cv2.waitKey(0)
    if __name__ == '__main__':
        main()
    

    绘制一个矩形框 方法2
    使用函数cv2.selectROI(windowName, img, showCrosshair=None, fromCenter=None)
    windowName:选择的区域被显示在的窗口的名字
    img:要在什么图片上选择ROI
    showCrosshair:是否在矩形框里画十字线.
    fromCenter:是否是从矩形框的中心开始画

    import cv2
    img=cv2.imread('fangye.jpg')
    
    r= cv2.selectROI('ROI',img,False,False)
    #x,y,w,h=r
    print(r)
    imCrop = img[int(r[1]):int(r[1] + r[3]), int(r[0]):int(r[0] + r[2])]
    cv2.imshow("cut_image", imCrop)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    结果r=(109, 44, 243, 153)

    框选后 一点要点击 Enter 键才显示框选图像。

    绘制多边形框
    cv2.polylines:绘制多边形框
    cv2.fillPoly:填充多边形框。把框内填满,使其是多边形。
    这下面这段代码借鉴博客
    OpenCV-Python选择ROI(矩形和多边形)

    import cv2
    
    import numpy as np
    
    
    pts = []  # 用于存放点
    # 统一的:mouse callback function
    def on_mouse(event, x, y, flags, param):
        img2 = img.copy()
    
        if event == cv2.EVENT_LBUTTONDOWN:  # 左键点击,选择点
            pts.append((x, y))
    
        if event == cv2.EVENT_RBUTTONDOWN:  # 右键点击,取消最近一次选择的点
            pts.pop()
    
        if event == cv2.EVENT_RBUTTONDBLCLK:  # 右键双击绘制轮廓
            mask = np.zeros(img.shape, np.uint8)#掩膜
            points = np.array(pts, np.int32)
            points = points.reshape((-1, 1, 2))
            # 画多边形
            mask = cv2.polylines(mask, [points], True, (255, 255, 255), 2)
            mask2 = cv2.fillPoly(mask.copy(), [points], (255, 255, 255))  # 用于求 ROI
            mask3 = cv2.fillPoly(mask.copy(), [points], (0, 255, 0))  # 用于 显示在桌面的图像
    
            show_image = cv2.addWeighted(src1=img, alpha=0.8, src2=mask3, beta=0.2, gamma=0)
    
            #cv2.imshow("mask", mask2)
            cv2.imshow("show_img", show_image)
    
            ROI = cv2.bitwise_and(mask2, img)
            cv2.imshow("ROI", ROI)
            cv2.waitKey(0)
    
        if len(pts) > 0:
            # 将pts中的最后一点画出来
            cv2.circle(img2, pts[-1], 3, (0, 0, 255), -1)
    
        if len(pts) > 1:
            # 画线
            for i in range(len(pts) - 1):
                cv2.circle(img2, pts[i], 5, (0, 0, 255), -1)  # x ,y 为鼠标点击地方的坐标
                cv2.line(img=img2, pt1=pts[i], pt2=pts[i + 1], color=(255, 0, 0), thickness=2)
    
        cv2.imshow('image', img2)
    
    
    # 创建图像与窗口并将窗口与回调函数绑定
    img = cv2.imread("fangye.jpg")
    cv2.namedWindow('image')
    cv2.setMouseCallback('image', on_mouse)
    print("[INFO] 单击左键:选择点,单击右键:删除上一次选择的点,双击右键:确定ROI区域")
    print("[INFO] 按 ESC 退出")
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    用下 范爷的美图吧。来源于网络。
    这方法速度太慢。

    电气专业的计算机萌新。写博文不容易。如果你觉得本文不错,请点个赞支持下,谢谢。

    展开全文
  • 我希望可以lable中加载的一帧图像中通过点击鼠标左键开始绘制矩形按住左键拖动时改变矩形的形状,松开左键后完成绘制。(和lableImg软件类似)。 请问如何实现上述功能呢?我目前找到的方法是使用QPainter来...
  • c#绘图源码,可以按住鼠标拖动图形及通过八个方向拉伸图形
  • def on_mouse(event, x, y, flags, param): #1.event是 CV_EVENT_*变量之一 2.x和y是鼠标指针图像坐标系的坐标(不是窗口坐标系) 3.flags是CV_EVENT_FLAG的组合, param是用户定义的传递到setMouseCallback函数...

    import cv2## 标题

    global img
    global point1, point2
    def on_mouse(event, x, y, flags, param): #1.event是 CV_EVENT_*变量之一 2.x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系) 3.flags是CV_EVENT_FLAG的组合, param是用户定义的传递到setMouseCallback函数调用的参数
    global img, point1, point2
    img2 = img.copy()
    if event == cv2.EVENT_LBUTTONDOWN: #左键点击
    point1 = (x,y)
    cv2.circle(img2, point1, 10, (0,255,0), 1)
    cv2.imshow(‘image’, img2)
    elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): #按住左键拖曳
    cv2.rectangle(img2, point1, (x,y), (255,0,0), 1) #鼠标移动和拖拽
    cv2.imshow(‘image’, img2)
    elif event == cv2.EVENT_LBUTTONUP: #左键释放
    point2 = (x,y)
    cv2.rectangle(img2, point1, point2, (0,0,255), 1)
    cv2.imshow(‘image’, img2)
    min_x = min(point1[0],point2[0])
    min_y = min(point1[1],point2[1])
    width = abs(point1[0] - point2[0])
    height = abs(point1[1] -point2[1])
    cut_img = img[min_y:min_y+height, min_x:min_x+width]
    cv2.imwrite(‘lena3.jpg’, cut_img)
    def main():
    global img #global 看做全局变量
    img = cv2.imread(‘Show_Image.jpg’)
    cv2.namedWindow(‘image’)
    cv2.setMouseCallback(‘image’, on_mouse)
    cv2.imshow(‘image’, img)
    cv2.waitKey(0)

    if name == ‘main’: #if name == 'main’的意思是:当.py文件被直接运行时,if name == ‘main’之下的代码块将被运行;当.py文件以模块形式被导入时,if name == ‘main’之下的代码块不被运行。
    main()
    ‘’‘EVENT define CV_EVENT_MOUSEMOVE 0 滑动
    define CV_EVENT_LBUTTONDOWN 1 左键点击
    define CV_EVENT_RBUTTONDOWN 2 右键点击
    define CV_EVENT_MBUTTONDOWN 3 中间点击
    define CV_EVENT_LBUTTONUP 4 左键释放
    define CV_EVENT_RBUTTONUP 5 右键释放
    define CV_EVENT_MBUTTONUP 6 中间释放
    define CV_EVENT_LBUTTONDBLCLK 7 左键双击
    define CV_EVENT_RBUTTONDBLCLK 8 右键双击
    define CV_EVENT_MBUTTONDBLCLK 9 中间释放
    flags
    define CV_EVENT_FLAG_LBUTTON 1 左键拖拽
    define CV_EVENT_FLAG_RBUTTON 2 右键拖拽
    define CV_EVENT_FLAG_MBUTTON 4 中间拖拽
    define CV_EVENT_FLAG_CTRLKEY 8 (8~15)按Ctrl不放事件
    define CV_EVENT_FLAG_SHIFTKEY 16 (16~31)按Shift不放事件
    define CV_EVENT_FLAG_ALTKEY 32 (32~39)按Alt不放事件(后面8-39还有待研究)’’’

    展开全文
  • 们选择的模式拖动鼠标时绘制矩形或者是圆圈(就像画图程序中一样)。所以 我们的回调函数包含两部分,一部分画矩形,一部分画圆圈。这是一个典型的 例子他可以帮助我们更好理解与构建人机交互式程序,比如物体...
  • 绘制矩形时按下SHIFT则绘制正方形

    千次阅读 2011-12-27 13:25:32
    //按下SHIFT时绘制正方形 if(GetKeyState(VK_SHIFT) & PRESSED) { double dDistX = tempPoint.x - StartPt.x; double dDistY = tempPoint.y - StartPt.y; //判断较短的边 if(fabs(dDistX) (dDistY)) {
  • 用canvas实现鼠标拖动绘制矩形

    千次阅读 2016-12-20 15:38:00
    鼠标拖动绘制矩形框(canvas) title > head > < body > < canvas id ="canvas" width ="600" height ="300" style ="border: 1px solid #000;" > canvas > < script src ="./jquery-1.11.3.min.js" ...
  • 做项目越来越感觉到需要学的东西很多,但完成之后又觉得随着时间流逝,很多东西又变得模糊甚至是完全遗忘,所以此进行记录与梳理。参考的会放在下方的链接里 首先是实现图片显示鼠标移动的痕迹(左键按下后),...
  • Microsoft Expression Blend 2 中绘制圆角矩形按钮
  • 3. 鼠标绘制矩形按住左键拖动,选中并移动矩形 4. 选中矩形后鼠标选中矩形四个角按住拖动,可缩放矩形 效果预览 blog代码仅包含绘制画布部分,截图涉及列表展示、画布区域计算等,此处均省略,以一个...
  • 原文:... 接着左上角的圆点处按下鼠标,然后滑动到右下角的圆点处,从而创建一个基于两个圆点的矩形。 3. 点击键盘上的删除键,删除创建的矩形对象。 4. 按下键盘上的快捷键。 ...
  • 鼠标按住之后实现绘图的预览,松手之后才真正画canvas中绘制圆形的时候需要对圆的大小方位进行控制需要对当前鼠标的坐标进行精准的定位 代码实现 #canvas { border: thin solid black; ...
  • 新建一个机遇Dlg的工程,主对话框类中加入 protected: HICON m_hIcon; CRectTracker* m_pRectTracker; BOOL m_bMoving; CPoint m_ptOffset; BOOL CRectTrackDlg::OnInitDialog()中加入: m_bMoving = ...
  • 满意答案h13488292172014.05.04采纳率:46%等级:12已帮助:12035人我之前写过一个jQuery小插件:... 没有什么实际用途,只是实现绘制矩形和拖拽功能。 jQueryRuler写空间,有演示,有兴趣可以看一下。 hi.ba...
  • 由中心向四周绘制矩形----选中矩形工具,按住 Alt键 绘制 由中心向四周绘制正方形----选中矩形工具,按住 Shift+Alt键 绘制 绘制的矩形默认为直角矩形。若想 绘制圆角矩形,则需要打开矩形工具的属性面板进行设置。...
  • 用于绘制矩形 绘图区进行拖拉可绘制任意矩形 绘制时按住Ctrl键可绘制正方形 按住Shift键可以以点击点为中心画矩形 按住Ctrl+Shift键可以点击点为中心画正方形 双击矩形工具时可建立一个与页面大小一样的矩形;...
  • 选择矩形工具,点击页面,输入高宽,精确绘制矩形。 如果对绘制的矩形不满意,选择这个矩形,上方面板有“变换”选项“重新输入数值,改变矩形。或者直接从窗口调出变换面板。 示例:绘制一个矩形,填充一个颜色,...
  • 真相只有一个!那就是:把它按下去就完事了啊!不用做!!!欸,别动手!别动手。。。我说!我说还不行吗!...这种凹陷效果小图标和按钮最经常遇到的,... 第3步:用圆角矩形工具画布中央创建圆角矩形,半径为50p...
  • PS绘制边框

    千次阅读 2017-04-25 10:21:34
    第三步:右侧菜单栏中鼠标选中新建的选区,按住ctrl点击刚刚绘制矩形,选中选区。 第四步:上面的菜单栏点击编辑,选择描边,进行绘制。 第五步:关闭或删除之前绘制矩形,一个矩形框就绘制出来了。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,153
精华内容 2,061
关键字:

在绘制矩形的同时按住