Numpy-如何在OpenCV python中迭代创建ROI?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Numpy-如何在OpenCV python中迭代创建ROI?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1692字,纯文字阅读大概需要3分钟。
内容图文
我试图在较小图像的网格中分割图像,以便我可以分别处理每个小图像.为此,我意识到我必须将每个小图像定义为ROI,我可以从那里轻松使用它.
现在,我的网格大小不固定.即,如果用户输入5,我必须制作5×5的网格.
逐像素迭代图像会很慢,所以我决定使用Numpy通过使用这个构造来创建ROI:
#Assuming user entered grid size =5
roiwidth=w/5
roiheight=h/5
roi0=img[0:roiheight,0:roiwidth]
这将是我的第一片. h和w分别是图像的高度和宽度.对于下一个切片,我必须做:
roi1=img[0:roiheight,roiwidth+1:2*roiwidth]
虽然我的上一次roi将是:
roi25=img[4*roiheight+1:5*roiheight, 4*roiwidth+1:5*roiwidth]
但我需要迭代地做,并且无法弄清楚这样做的正确方法.我不想逐个像素地迭代图像,需要它是动态的
编辑:我现在正在迭代:
import cv2
import numpy
img=cv2.imread('01.jpg')
h,w,chan=img.shape
rh=h/5
rw=w/5
z={}
count=0
for i in range (0,5):
for j in range (0,5):
yl=i*rh
yh=(i+1)*rh
xl=j*rw
xh=(j+1)*rw
z[count]=img[yl:yh,xl:xh]
count=count+1
但我不知道这是否是最有效的方法.
解决方法:
出于效率目的,下面列出了使用重塑和置换维度的矢量化方法.
1)让我们定义输入参数和设置输入:
M = 5 # Number of patches along height and width
img_slice = img[:rh*M,:rw*M] # Slice out valid image data
2)主要处理部分来到这里.拆分切片图像的前两个轴,使得我们通过整形创建两个长度为M的新轴.因此,剩下的两个轴将代表窗口(rh x rw).我们的最终目标是使它们彼此相邻以便给我们(rh,rw)补片,因此另外两个分裂轴也将彼此相邻.为此,我们需要使用np.transpose来置换维度.在置换之后,我们重新整形以合并长度(M,M)的两个维度,以便我们最终得到一个长度为M ^ 2的轴,其每个元素将代表来自图像的一个窗口.
所以,最后我们会:
z = img_slice.reshape(M,rh,M,rw,-1).transpose(0,2,1,3,4).reshape(M**2,rh,rw,-1)
这为我们提供了沿第一轴具有M ^ 2个元素的NumPy数组.沿着该轴的每个切片将对应于每个窗口/贴片.因此,z [0]将是左上角的补丁,依此类推.
内容总结
以上是互联网集市为您收集整理的Numpy-如何在OpenCV python中迭代创建ROI?全部内容,希望文章能够帮你解决Numpy-如何在OpenCV python中迭代创建ROI?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。