我认为最好是全局保存坐标,而不是使用一堆高标度/低标度。它们让我头疼,可能会因为舍入而失去精确性。在

也就是说,每次检测到某个对象时,首先将其转换为全局(原始图像)坐标。我在这里写了一个小的演示,模仿你的检测和{}行为。在

初始检测:

放大,另一个检测:

放大,另一个检测:

放大,另一个检测:

放大到原始比例,检测箱位于正确位置

代码:import cv2

import matplotlib.pyplot as plt

IMG_SIZE = 224

im = cv2.cvtColor(cv2.imread('lena.jpg'), cv2.COLOR_BGR2GRAY)

im = cv2.resize(im, (IMG_SIZE, IMG_SIZE))

# Your detector results

detected_region = [

[(10, 20) , (80, 100)],

[(50, 0) , (220, 190)],

[(100, 143) , (180, 200)],

[(110, 45) , (180, 150)]

]

# Global states

x_scale = 1.0

y_scale = 1.0

x_shift = 0

y_shift = 0

x1, y1 = 0, 0

x2, y2 = IMG_SIZE-1, IMG_SIZE-1

for region in detected_region:

# Detection

x_scale = IMG_SIZE / (x2-x1)

y_scale = IMG_SIZE / (y2-y1)

x_shift = x1

y_shift = y1

cur_im = cv2.resize(im[y1:y2, x1:x2], (IMG_SIZE, IMG_SIZE))

# Assuming the detector return these results

cv2.rectangle(cur_im, region[0], region[1], (255))

plt.imshow(cur_im)

plt.show()

# Zooming in, using part of your code

context_pixels = 16

x1 = max(region[0][0] - context_pixels, 0) / x_scale + x_shift

y1 = max(region[0][1] - context_pixels, 0) / y_scale + y_shift

x2 = min(region[1][0] + context_pixels, IMG_SIZE) / x_scale + x_shift

y2 = min(region[1][1] + context_pixels, IMG_SIZE) / y_scale + y_shift

x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)

# Assuming the detector confirm its choice here

print('Confirmed detection: ', x1, y1, x2, y2)

# This time no padding

x1 = detected_region[-1][0][0] / x_scale + x_shift

y1 = detected_region[-1][0][1] / y_scale + y_shift

x2 = detected_region[-1][1][0] / x_scale + x_shift

y2 = detected_region[-1][1][1] / y_scale + y_shift

x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)

cv2.rectangle(im, (x1, y1), (x2, y2), (255, 0, 0))

plt.imshow(im)

plt.show()

这也可以防止在调整大小的图像上调整大小,这可能会产生更多的伪影并恶化探测器的性能。在

python画十字_用OpenCV在图像上画十字相关推荐

  1. OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字

    OpenCV在图像上随机画直线.椭圆.多边形.圆.显示文字 代码如下: /*** @file Drawing_2.cpp* @brief Simple sample code*/#include &l ...

  2. python opencv在图像上画点和圆

    利用 opencv 里自带的 circle() 函数可以绘制以一个点为圆心特定半径的圆,其函数的声明如下: cv2.circle(img, center, radius, color[, thickn ...

  3. OpenCV circle图像上画圆

    OpenCV中circle与rectangle函数显示,只不过rectangle在图像中画矩形,circle在图像中画圆. void circle(Mat img, Point center, int ...

  4. OpenCV在图像上画正弦曲线(c++)

    写在前面:欢迎来到「湫歌」的博客.我是秋秋,一名普通的在校大学生.在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成 ...

  5. 在yuv上画线_利用布雷森汉姆算法绘制在YUV图像上画直线

    最近,因工作需要,在YUV图像上画直线: 算法1步骤: 1.已知直线的起点和终点: 2. 利用布雷森汉姆算法在两点间画直线: 3. 将该直线上的点的颜色在YUV图像上画出. 布雷森汉姆算法原理参考wi ...

  6. opencv3_java 在已有的图像上画圆圈 CircleOnImg

    在已有的图像上画圆圈 CircleOnImg package opencv_java_demo;import org.opencv.core.*; import org.opencv.imgcodec ...

  7. 【目标检测】在图像上画bounding box框,生成带真实标签gt的图片

    [目标检测]在图像上画bounding box框,生成带真实标签gt的图片 问题/Motivation 数据格式 用到的库 实际代码` 结果展示 问题/Motivation 在制作完数据集后,想看一下 ...

  8. OpenCV在图像上添加边框borders

    OpenCV在图像上添加边框borders 在图像上添加边框borders 目标 理论 代码 解释 声明变量 载入图片 创建一个窗口 初始化参数 环形loop 颜色随机 在图像周围形成边框 结果 在图 ...

  9. matlab 图像上画椭圆 保持原来图像分辨率

    一. 问题 在真实图像上画椭圆后,保存的图像要不有空白边界要不分辨率大小和原图不一样. 二. 解决方法 利用 figure 的 border 属性 Im2=imread('image\egg.jpg' ...

最新文章

  1. CISCO设备上DHCP实例
  2. excel 粘贴了HTML怎么删掉,Excel怎么删除网页上复制删不掉的文本框
  3. jdk jenkins 配置ant_安装配置maven、ant(Jenkins)
  4. 中秋我用CSS写了个嫦娥奔月
  5. linux文件创建、查看、编辑命令
  6. MySQL基础之DML语句
  7. c程序编写x的y次方的方法
  8. node.js 和 HTML5-Canvas 结合实现截图上传交互
  9. 【转】ABP源码分析九:后台工作任务
  10. 不会卸载MySQL?我连夜肝了一篇教你如何干干净净地卸载掉MySQL
  11. 数学建模 分支限界算法求解整数规划原理以及编程实现
  12. Ubuntu全盘备份与恢复
  13. NetSuite二次开发服务改变中小企业发展困境!
  14. C# 生成验证码 方法一
  15. 用python建云盘_实用的Python(3)超简单!基于Python搭建个人“云盘”
  16. 从信号转换角度研究血压(波形)预测的相关论文
  17. 服务器怎么装虚拟打印机,pdfFactory pdf虚拟打印机安装使用教程[图文]
  18. 第二届天府大地艺术季(春)三道堰青杠树村分会场开幕
  19. db2 系统临时表空间
  20. 学习深度学习过程中的一些经验与方法

热门文章

  1. 迪士尼拟调整首席执行官薪酬方案:削减1350万美元薪酬和奖励
  2. java动态方法_Java 动态方法调用
  3. C语言:利用time函数的定时器
  4. tp5如何在模板格式化显示时间_华为手机如何才能息屏显示时间?手把手教你,一秒就能学会...
  5. 如何更安全高效地翻译外文资料?
  6. 如何用matlab进行脑电信号处理,基于matlab的脑电信号处理
  7. Synopsys SV Lab Guide—router简介
  8. NC212914 牛牛与后缀表达式
  9. 石油勘探是属于计算机应用中的,计算机在石油勘探开发中的应用
  10. CSS 滚动条样式【兼容chrome、Firefox、IE】