'''
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. jquery判断滚动条是否到达顶部或者底部

    <script> $(function(){ $(window).scroll(function(){ //离顶部的距离=0 //方法一:var isTop=$(this).scrollT ...

  2. Mutillidae品台上使用sqlmap注入测试

    Mutillidae是一个开放源码的提供安全渗透测试的Web应用程序, Mutillidae可以安装在Linux.windows xp.windows 7等平台上.下载及安装说明文档详见:mutill ...

  3. 使用 Docker 部署 GLPI 资产管理系统

    1)GLPI 介绍 GLPI 简介 参考: https://github.com/glpi-project/glpi 官方文档:https://glpi-project.org/documentati ...

  4. IDEA 报错 project is already registered

    1.环境&背景 有时候IEDA下一个工程中想引入多个项目,只能添加多个modules. 版本:IDEA 2020.2 构建:gradle 2.问题 有时候删掉了某个项目再导入时报错 proje ...

  5. Idea编译/运行Java程序慢

    修改前: 修改后: 参考: https://www.jjput.com/archives/macbookpro14m1mavenslowcompilation 问题 JDK尽量不要换版本 class ...

  6. C语言中的强制转换

    许久没有遇到的问题   C语言真是博大精深,越使用它,就越发感觉到它的威力和恐怖,最近在做算法的时候,遇到了一个强转的错误,把人折腾的够受,这次要好好梳理一下了,希望下次不能再犯此类的问题. 强制转换 ...

  7. 向TreeView添加自定义信息

    可在 Windows 窗体 TreeView 控件中创建派生节点,或在 ListView 控件中创建派生项. 通过派生可添加任何所需字段,以及添加处理这些字段的自定义方法和构造函数. 此功能的用途之一 ...

  8. 译:使用现代的 Node.js 构建简单的CLI工具

    原文地址: https://evertpot.com/node-changelog-cli-tool/ 作者: Evert Pot 发布时间:2023-02-13 只使用 Node.js 的标准库,不 ...

  9. Welcome to YARP - 2.1配置功能 - 配置文件

    目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 ...

  10. 03.Android之View原理问题

    目录介绍 3.0.0.1 View的绘制需要经过哪些过程?有哪些常用回调方法?View的绘制流程的详细流程是怎样的? 3.0.0.2 View绘制流程,当一个TextView的实例调用setText( ...