'''
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. Codeforces Round 113 (Div. 2)E. Tetrahedron(dp、递推)

    目录 题面 链接 题意 题解 代码 总结 题面 链接 E. Tetrahedron 题意 从一个顶点出发走过路径长度为n回到出发点的方案总数 题解 考虑dp \(f[i][0|1|2|3]\):走了i ...

  2. MinGW编译Python至pyd踩坑整理

    不需要安装VS工具,pyd使用说明. 用scoop自动安装配置MinGw 需要魔法,用包管理scoop安装不需要手动配置.这一步可以自行下载mingw64然后手动配置. scoop install m ...

  3. C++红黑树的实现

    最近闲来无事,一直没有研究过红黑树,B树,B+树之类的,打算自己用C语言实现一下它们. 红黑树的性质定义: 节点只能是黑色或者红色. 根节点必须是黑色. 每个叶子节点是黑色节点(称之为NIL节点,又被 ...

  4. Linux Subreaper 机制及内核态逃离方法(PR_SET_CHILD_SUBREAPER, prctl, systemed)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   无 前言   由于某些其他的原因,我们在测试另外一 ...

  5. 移远EC20 4G模块Linux驱动移植和测试

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

  6. 智慧党建3D可视化方案,扩大党建文化宣传数字网络影响力

    信息技术的快速发展加快了社会分化解构,重构了人际传播渠道.随着党员中网民."数字原住民"比重持续攀升,党员工作生活信息化.网络化.数据化持续加深,传统的党建方式对党员,特别是年轻一 ...

  7. CSS(选择器、字体属性、文本属性、三种引入方式)

    css简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表. CSS 是也是一种标记语言 CSS 主要用于设置 H ...

  8. 提升团队协作效率:欧奥PicHome打造无缝资料共享平台

    1. 引言 在快节奏的工作环境中,团队成员需要快速访问和共享信息.有效的资料共享不仅提高工作效率,还能促进团队协作和创新.然而,许多团队仍在使用传统的文件共享方法,这些方法往往效率低下,难以满足现代工 ...

  9. KingbaseES Json 系列六:Json记录操作函数一

    KingbaseES Json 系列六--Json记录操作函数一(JSONB_TO_RECORD,JSONB_TO_RECORDSET,JSON_TO_RECORD,JSON_TO_RECORDSET ...

  10. archlinux xfce修改桌面字体颜色

    参照 https://forums.linuxmint.com/viewtopic.php?t=341804 1.大于等于4.14的版本则在主文件夹的 .config 文件夹 gtk-3.0 中,创建 ...