'''
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. H3C-IP路由器

    定义 路由器负责将数据报文在IP网段之间进行转发 路由器负责将数据报文在IP网段之间进行转发 路由是指导路由器如何进行数据转发的路径信息 作用 路由器负责将数据报文在逻辑网段间进行转发 路由器是指导路 ...

  2. 摆脱鼠标系列 Trigger Suggest 快捷键 改成 Shift + Space

    摆脱鼠标系列 Trigger Suggest 快捷键 改成 Shift + Space 看marp插件的时候,发现用ctrl + space 自动提示,但是我这里是输入法

  3. win10 有 休眠 功能,将内存保存到文件,开机10秒左右,恢复之前idea等所有软件

    休眠 休眠 休眠 重要的事情说三遍. 提示,默认不显示,需要控制面板 电源里面设置下.

  4. Android 关于Dialog在全屏弹出会显示状态栏和导航栏的问题解决

    项目的奇葩需求,需要弹出Dialog不要显示状态栏和导航栏,记录一下解决方法 原文地址:Android 关于Dialog在全屏弹出会显示状态栏和导航栏的问题解决 Stars-one的杂货小窝 说明 A ...

  5. php处理序列化jQuery serializeArray数据

    介绍jquery的几个常用处理表单的函数: 1.序列化表单内容元素为字符串,常用于ajax提交. $("form").serialize() 2. serializeArray() ...

  6. HISI3520DV300 折腾记录(三)之《终篇》

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  7. Spring Boot学习日记1

    今天了解了springboot是什么,起源和历史 Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson . Spring是为了解决企业级应用开发的 ...

  8. python高级技术(线程)

    一 线程理论 1 有了进程为什么要有线程 进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率.很多人就不理解了,既然进程这么优秀,为什么还要线程 ...

  9. 浅析三维模型OBJ格式轻量化压缩文件大小的技术方法

    浅析三维模型OBJ格式轻量化压缩文件大小的技术方法 在减小三维模型OBJ格式轻量化文件大小方面,有许多技术和方法可以使用.下面我将介绍一些常用的方法来减小OBJ文件的大小. 1.优化顶点数量:减少OB ...

  10. 记录--整会promise这8个高级用法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 发现很多人还只会promise常规用法 在js项目中,promise的使用应该是必不可少的,但我发现在同事和面试者中,很多中级或以上的前端 ...