python显示图片并让用户框选_matplotlib选择图像的框区域,然后放大-程序员宅基地

技术标签: python显示图片并让用户框选  

使用opencv从网络摄像头获取帧,然后进行绘图。

我在图的中心画一个矩形,然后得到选定的区域并显示在另一个绘图中(通过插值放大)import matplotlib.pyplot as plt

import matplotlib.animation as animation

import cv2

boxSize = 150

enlargeBy = 3

def getBoxCoordinates(cap, size):

width = cap.get(3)

height = cap.get(4)

x1 = int(width / 2) - int(size / 2)

y1 = int(height / 2) - int(size / 2)

x2 = int(width / 2) + int(size / 2)

y2 = int(height / 2) + int(size / 2)

return [(x1, y1), (x2, y2)]

def getBox(cap, boxSize, frame, enlargeBy):

[(x1, y1), (x2, y2)] = getBoxCoordinates(cap, boxSize);

# Get pixels in box

box_img = frame[y1 + 1:y2, x1 + 1:x2] # +1 cuz it excludes initial pixel interval

return cv2.resize(box_img, None, fx=enlargeBy, fy=enlargeBy,

interpolation=cv2.INTER_LINEAR) # different interpolation methods

cap = cv2.VideoCapture(0);

ret, frame = cap.read()

figWidth = 20

figHeight = 8

fig = plt.figure(figsize=(figWidth, figHeight))

enlarged = getBox(cap, boxSize, frame, enlargeBy)

[(x1, y1), (x2, y2)] = getBoxCoordinates(cap, boxSize);

cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), lineType=1)

video_plot = plt.subplot2grid((figHeight, figWidth), (0, 0), colspan=4, rowspan=4)

video_plot.axis('off')

video_plot.set_title("Camera feed")

video = video_plot.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))

box_plot = plt.subplot2grid((figHeight, figWidth), (0, 4), colspan=4, rowspan=4)

box_plot.axis('off')

box_plot.set_title("Box")

box = box_plot.imshow(cv2.cvtColor(enlarged, cv2.COLOR_BGR2RGB)) #frame just to start

def updatefig(i):

ret, frame = cap.read()

cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), lineType=1)

enlarged = getBox(cap, boxSize, frame, enlargeBy)

video.set_data(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))

box.set_data(cv2.cvtColor(enlarged, cv2.COLOR_BGR2RGB))

return [video, box]

ani = animation.FuncAnimation(fig, updatefig, interval=20, frames=200, blit=True)

plt.tight_layout()

plt.show()

cv2.destroyAllWindows()

plt.show()

我遇到的奇怪问题是,我在框架上绘制的矩形没有正确显示:它只显示一个或几个边。

我注意到,当图形尺寸发生变化时,这种情况会发生变化,例如上面的代码只显示底部和左侧,如果我更改:

^{pr2}$

然后我看到了底部、右侧和顶部,但没有看到左侧。在

不知道到底是什么原因造成了这种情况,也不知道该怎么解决。在

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39890431/article/details/110770388

智能推荐

图表示学习Graph Embedding:DeepWalk python实现_graph embedding python-程序员宅基地

文章浏览阅读1.1w次,点赞12次,收藏45次。https://github.com/AI-luyuan/graph-embedding_graph embedding python

【JAVA开发小技巧】使用enum枚举类规范化代码_枚举 代码规范-程序员宅基地

文章浏览阅读433次,点赞6次,收藏11次。阿里巴巴Java开发手册中推荐,如果常量类中变量值仅在一个范围内变化,且带有名称之外的延伸属性, 建议定义为枚举类。使用枚举类可以使我们的代码更加规范且美观。_枚举 代码规范

Python基础教程:strip 函数踩坑_python的rstrip为什么没用-程序员宅基地

文章浏览阅读430次。S.strip(chars=None)strip 函数用于去除字符串首尾的空格,当 chars 不为 None 时,则删除字符串首尾的 chars 中的字符。当 chars=None 时,去除首尾空格,没啥好说的,我们来看 chars 不为 None 时的情况。str = 'abc123abc'print(str.strip('a')) # bc123abcprint(str.strip('abc')) # 123结果跟预期的一样,我们再看下面的例子:'''Pyth_python的rstrip为什么没用

Kotlin 解压缩_kotlin 对上传的压缩包进行分析-程序员宅基地

文章浏览阅读638次。fun unZip(zipFile: String, context: Context) { var outputStream: OutputStream? = null var inputStream: InputStream? = null try { val zf = ZipFile(zipFile) val entries = zf.entries() while (en..._kotlin 对上传的压缩包进行分析

64K方法数限制解决办法_java函数大于64k编译失败-程序员宅基地

文章浏览阅读1.9k次。随着业务逻辑越来越多,业务模块也越来越大,不可避免会遇到64K方法数的限制。最直观的表现就是编译报错:较早版本的编译系统中,错误内容如下:Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536较新版本的编译系统中,错误内容如下:trouble writing outp_java函数大于64k编译失败

案例分享——低压电力线载波通信模组(借助电源线实现远距离数据传输、宽压输入、波特率范围广、应用场景多样化)_电力载波模块csdn-程序员宅基地

文章浏览阅读2k次,点赞7次,收藏10次。物联网领域,有很多数据通信场景,因为原设备整体系统结构、运行环境等方面的限制,需求在不增加通信数据线缆的情况下实现数据的远程传输,因为特殊应用场景下考虑到环境的限制,还不能使用常规的无线通信手段,所以借助电源线缆进行传输的电力线载波技术应运而生,本次博文给大家分享的就是博主完全自主研发的低压电力线载波通信模组。_电力载波模块csdn

随便推点

<转载>Android 对sdcard操作-程序员宅基地

文章浏览阅读347次。其实就是普通的文件操作,不过还是有些地方需要注意。比如: 1.加入sdcard操作权限; 2.确认sdcard的存在; 3.不能直接在非sdcard的根目录创建文件,而是需要先创建目录,再创建文件; 在AndroidManifest.xml添加sdcard操作权限 复制代码

BDC报错信息查看-程序员宅基地

文章浏览阅读150次。3.在事务代码se91中输入对应消息类和消息编号。1.在事务代码st22的报错信息中下载本地文件。4.查看报错信息,根据报错信息取解决问题。2.打开本地文件查看报错信息。

AS 3.1.3连续依赖多个Module,导致访问不到Module中的类_为什么as在一个包下建了多个module,缺无法打开了-程序员宅基地

文章浏览阅读1.1k次。我好苦啊,半夜还在打代码。还出bug,狗日的。问题是这样的:我在新建的项目里,建了两个Module: fiora-ec和fiora-core。项目的依赖顺序是这样的,App依赖fiora-ec,fiora-ec又依赖于fiora-core,因为这种依赖关系,所有可以在app和fiora-ec中删除一些不必要的引入,比如这个玩意儿:com.android.support:appcompat-v7:..._为什么as在一个包下建了多个module,缺无法打开了

Magento 常用插件二-程序员宅基地

文章浏览阅读1.4k次。1. SMTP 插件 URL:http://www.magentocommerce.com/magento-connect/TurboSMTP/extension/4415/aschroder_turbosmtp KEY:magento-community/Aschroder_TurboSmtp 2. Email Template Adapter..._magento extension pour ricardo.ch

【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模的资源(六)-程序员宅基地

文章浏览阅读161次。声明:本文为原创作品,版权归akuei2及黑金动力社区共同所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 2.5 低级建模的资源 低级建模有讲求资源的分配,目的是使用“图形”来提高建模的解读性。 图上是低级建模最基本的建模框图,估计大家在实验一和实验二已经眼熟过。功能模块(低级功能模块)是一个水平的长方形,而控制模块(低级控制模块)是矩形。组..._cyclone ep2c8q208c黑金开发板

R语言实用案例分析-1_r语言案例分析-程序员宅基地

文章浏览阅读2.2w次,点赞10次,收藏63次。在日常生活和实际应用当中,我们经常会用到统计方面的知识,比如求最大值,求平均值等等。R语言是一门统计学语言,他可以方便的完成统计相关的计算,下面我们就来看一个相关案例。1. 背景最近西安交大大数据专业二班,开设了Java和大数据技术课程,班级人数共100人。2. 需求通过R语言完成该100位同学学号的生成,同时使用R语言模拟生成Java和大数据技术成绩,成绩满分为100,需要满足正_r语言案例分析

推荐文章

热门文章

相关标签