'''
cv2在图像上画不同比例的锚框
'''
import cv2
import math # 画宽高比1:1的锚框
def display_11_anchor(img,anchor_11_left_top,anchor_11_right_bottom):
cv2.rectangle(img,
anchor_11_left_top,
anchor_11_right_bottom,
(0, 255, 0), # 颜色:G
2) # 画宽高比1:2的锚框
def display_12_anchor(img,anchor_12_left_top,anchor_12_right_bottom):
cv2.rectangle(img,
anchor_12_left_top,
anchor_12_right_bottom,
(255, 0, 0), # 颜色:B
2) # 画宽高比2:1的锚框
def display_21_anchor(img,anchor_21_left_top,anchor_21_right_bottom):
cv2.rectangle(img,
anchor_21_left_top,
anchor_21_right_bottom,
(0, 0, 255), # 颜色:R
2) # 画出所有锚框,size代表锚框面积占一个网格面积的百分比
def display_anchor(img,anchor_rows,anchor_columns,size):
heigh,width,channel = img.shape
area=heigh*width # 图片面积
grid_area=int(area//(anchor_rows*anchor_columns)*size) # 网格面积
anchor_11_width=math.sqrt(grid_area) # 宽高比1:1的锚框宽度
anchor_11_heigh=anchor_11_width # 宽高比1:1的锚框高度
anchor_12_width=math.sqrt(grid_area/2) # 宽高比1:2的锚框宽度
anchor_12_heigh=2*anchor_12_width # 宽高比1:2的锚框高度
anchor_21_width=anchor_12_heigh # 宽高比2:1的锚框宽度
anchor_21_heigh=anchor_12_width # 宽高比2:1的锚框高度 grid_edge_width=width//anchor_columns # 一个网格的宽度
grid_edge_heigh=heigh//anchor_rows # 一个网格的高度 for i in range(anchor_rows): # 遍历所有的网格
for j in range(anchor_columns):
grid_left_top=[grid_edge_width*j,grid_edge_heigh*i] # 网格的左上顶点
grid_right_bottom=[grid_edge_width*(j+1),grid_edge_heigh*(i+1)] # 网格的右下顶点 grid_centre=[(grid_right_bottom[0]-grid_left_top[0])//2+grid_left_top[0], # 找到网格的中心
(grid_right_bottom[1]-grid_left_top[1])//2+grid_left_top[1]] # 分别计算三种宽高比的锚框的左上和右下顶点
anchor_11_left_top=(int(grid_centre[0]-anchor_11_width//2),int(grid_centre[1]-anchor_11_heigh//2))
anchor_11_right_bottom=(int(grid_centre[0]+anchor_11_width//2),int(grid_centre[1]+anchor_11_heigh//2))
anchor_12_left_top=(int(grid_centre[0]-anchor_12_width//2),int(grid_centre[1]-anchor_12_heigh//2))
anchor_12_right_bottom=(int(grid_centre[0]+anchor_12_width//2),int(grid_centre[1]+anchor_12_heigh//2))
anchor_21_left_top=(int(grid_centre[0]-anchor_21_width//2),int(grid_centre[1]-anchor_21_heigh//2))
anchor_21_right_bottom=(int(grid_centre[0]+anchor_21_width//2),int(grid_centre[1]+anchor_21_heigh//2)) # 根据顶点画出矩形
display_11_anchor(img,anchor_11_left_top,anchor_11_right_bottom)
display_12_anchor(img,anchor_12_left_top,anchor_12_right_bottom)
display_21_anchor(img,anchor_21_left_top,anchor_21_right_bottom) cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows() if __name__ == '__main__': img_path = 'catdog.jpg'
img = cv2.imread(img_path)
display_anchor(img,anchor_rows=6,anchor_columns=6,size=0.4)

最终的显示效果如图:

图1 宽高比:6:6 图2 宽高比:3:6 图3 宽高比:6:3

cv2在图像上画不同比例的锚框的更多相关文章

  1. opencv3.3.1+vs2015+c++实现直接在图像上画掩码,保存掩码图片

    左键红右键蓝,保存为k #include "opencv2\imgproc\imgproc.hpp" // Gaussian Blur #include "opencv2 ...

  2. 机器学习进阶-图像金字塔与轮廓检测-模板匹配(单目标匹配和多目标匹配)1.cv2.matchTemplate(进行模板匹配) 2.cv2.minMaxLoc(找出矩阵最大值和最小值的位置(x,y)) 3.cv2.rectangle(在图像上画矩形)

    1. cv2.matchTemplate(src, template, method)  # 用于进行模板匹配 参数说明: src目标图像, template模板,method使用什么指标做模板的匹配 ...

  3. 机器学习进阶-图像金字塔与轮廓检测-轮廓检测 1.cv2.cvtColor(图像颜色转换) 2.cv2.findContours(找出图像的轮廓) 3.cv2.drawContours(画出图像轮廓) 4.cv2.contourArea(轮廓面积) 5.cv2.arcLength(轮廓周长) 6.cv2.aprroxPloyDP(获得轮廓近似) 7.cv2.boudingrect(外接圆)..

    1. cv2.cvtcolor(img, cv2.COLOR_BGR2GRAY) # 将彩色图转换为灰度图 参数说明: img表示输入的图片, cv2.COLOR_BGR2GRAY表示颜色的变换形式 ...

  4. 相机拍的图,电脑上画的图,word里的文字,电脑屏幕,手机屏幕,相机屏幕显示大小一切的一切都搞明白了!

    相机拍的图,电脑上画的图,word里的文字,电脑屏幕,手机屏幕,相机屏幕显示大小一切的一切都搞明白了! 先说图片X×dpi=点数dotX是图片实际尺寸,简单点,我们只算图片的高吧,比如说拍了张图片14 ...

  5. OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标

    涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回 ...

  6. Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解

    在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...

  7. [图像]用Matlab在图像上画矩形框

    原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/46819527 在毕业设计的时候写论文画图 ...

  8. 在YUV图像上根据背景色实现OSD反色

    所谓的OSD其实就是在视频图像上叠加一些字符信息,比如时间,地点,通道号等, 在图像上叠加OSD通常有两种方式: 一种是在前端嵌入式设备上,在图像数据上叠加OSD, 这样客户端这边只需解码显示数据即可 ...

  9. 图像上划矩形(cv.line()函数)

    在图像上划矩形 import numpy as npimport cv2 as cvimg=np.zeros((400,400),np.uint8)cv.line(img,(100,100),(350 ...

  10. OpenCV学习笔记(4)——图像上的算术运算

    学习图像上的算术运算,加法,减法,位运算等 1.图像加法 使用cv2.add()将两幅图像进行加法运算,也可以用numpy运算,直接img+img1.两幅图像的大小和类型必须一致,或者第二个图像可以是 ...

随机推荐

  1. supervisor的使用与配置说明

    Supervisor 是用 Python 开发的一套通用的 进程管理程序 ,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 一. 安装 1.1 安装 # 根目录下 ...

  2. 8、zookeeper的集群搭建

    完全配置--https://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html#sc_zkMulitServerSetup https://zoo ...

  3. 使用jenkins连接linux部署jar包

    jenkins安装 首先安装jenkins,我们可以使用docker安装.用下面命令拉取jenkins镜像. docker pull jenkins/jenkins 然后正常安装jenkins容器即可 ...

  4. 工具 --- IL指令集解释

    引言 汇总一下所有的 .NET IL 指令,以及它们的名称.操作码值.堆栈转换行为和描述. 作为反编译IL代码时的查询字典. IL 指令集列表 以下内容来自微软官方文档,通过百度翻译API翻译为中文. ...

  5. 基于 XAF Blazor 的规则引擎编辑器

    开源项目地址:https://gitee.com/lowcodexaf/rules-engine-editor 前言 本项目是基于XAFBlazor的规则引擎编辑器,规则引擎采用的是微软开源的Rule ...

  6. java学习 javaz-001 Helloworld 第一个demo

    java学习 javaz-001 Helloworld 第一个demo 目录 学习目标 前期准备 java sdk 1.8环境 编辑器IDE的选择 代码开发 目录结构 创建第一个java文件 创建第2 ...

  7. 幕布 和 xmind 的大纲模式 都很不错

    幕布 和 xmind 的大纲模式 都很不错 xmind 思维导图 ctrl+a 折叠所有子分支 然后就能一级一级展开 最后选择用 xmind的大纲模式,因为免费. 幕布收费,限300个节点,小数据量的 ...

  8. 32位数字电位器AD5228使用及调试总结

    一 概念 什么是数字电位计? 数字电位器(Digital Potentiometer)亦称数控可编程电阻器,是一种代替传统机械电位器(模拟电位器)的新型CMOS数字.模拟混合信号处理的集成电路.数字电 ...

  9. Java加密技术(四)——非对称加密算法RSA

    Java非对称加密算法rsa     接下来我们介绍典型的非对称加密算法--RSA RSA     这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很 ...

  10. Git进阶命令-revert

    有关Git,之前有写过两篇文章: Git五个常见问题及解决方法 Git进阶命令-reset 一.revert命令使用场景 有一天项目经理跟你说,你开发上线的代码有问题,需要马上撤回. 撤回?你第一反应 ...