我有一张图片。
我想为图像中的每个像素获得一个3x3的窗口(相邻像素)。
我有这个Python代码:
for x in range(2,r-1,1):
for y in range(2,c-1,1):
mask5=numpy.array([cv.Get2D(copy_img,x-1,y-1),cv.Get2D(copy_img,x-1,y),cv.Get2D(copy_img,x-1,y+1),cv.Get2D(copy_img,x,y-1),cv.Get2D(copy_img,x,y),cv.Get2D(copy_img,x,y+1),cv.Get2D(copy_img,x+1,y-1),cv.Get2D(copy_img,x+1,y),cv.Get2D(copy_img,x+1,y+1)])
cent=[cv.Get2D(copy_img,x,y)]
mask5是3x3窗口。分是中心像素。
有没有一种更有效的方法可以做到这一点-即使用地图,迭代器-除了我使用的两个嵌套循环以外的任何方法?
可以通过重塑和交换轴,然后在所有内核元素上重复这样来更快地完成操作,如下所示:
im = np.arange(81).reshape(9,9)
print np.swapaxes(im.reshape(3,3,3,-1),1,2)
这为您提供了一个3 * 3的瓷砖阵列,这些瓷砖在整个表面上进行镶嵌处理:
[[[[ 0 1 2] [[ 3 4 5] [[ 6 7 8]
[ 9 10 11] [12 13 14] [15 16 17]
[18 19 20]] [21 22 23]] [24 25 26]]]
[[[27 28 29] [[30 31 32] [[33 34 35]
[36 37 38] [39 40 41] [42 43 44]
[45 46 47]] [48 49 50]] [51 52 53]]]
[[[54 55 56] [[57 58 59] [[60 61 62]
[63 64 65] [66 67 68] [69 70 71]
[72 73 74]] [75 76 77]] [78 79 80]]]]
要使用的组合得到重叠的瓷砖,我们需要重复这个8进一步倍,但“包装”的阵列,vstack
和column_stack
。请注意,右侧和底部的图块数组会环绕(可能不是您想要的,取决于您如何处理边缘条件):
im = np.vstack((im[1:],im[0]))
im = np.column_stack((im[:,1:],im[:,0]))
print np.swapaxes(im.reshape(3,3,3,-1),1,2)
#Output:
[[[[10 11 12] [[13 14 15] [[16 17 9]
[19 20 21] [22 23 24] [25 26 18]
[28 29 30]] [31 32 33]] [34 35 27]]]
[[[37 38 39] [[40 41 42] [[43 44 36]
[46 47 48] [49 50 51] [52 53 45]
[55 56 57]] [58 59 60]] [61 62 54]]]
[[[64 65 66] [[67 68 69] [[70 71 63]
[73 74 75] [76 77 78] [79 80 72]
[ 1 2 3]] [ 4 5 6]] [ 7 8 0]]]]
这样,您将获得9组数组,因此需要将它们压缩在一起。这以及所有重塑都适用于此(对于尺寸可被3整除的数组):
def new(im):
rows,cols = im.shape
final = np.zeros((rows, cols, 3, 3))
for x in (0,1,2):
for y in (0,1,2):
im1 = np.vstack((im[x:],im[:x]))
im1 = np.column_stack((im1[:,y:],im1[:,:y]))
final[x::3,y::3] = np.swapaxes(im1.reshape(rows/3,3,cols/3,-1),1,2)
return final
比较此new
功能与使用循环遍历所有切片(下图)(timeit
对于300 * 300阵列而言,快约4倍)。
def old(im):
rows,cols = im.shape
s = []
for x in xrange(1,rows):
for y in xrange(1,cols):
s.append(im[x-1:x+2,y-1:y+2])
return s
假设我有一个每1分钟开始的2小时窗口。下一步是应用GroupBy转换。 如果能解释这一点,我将不胜感激。无法真正找到相关信息
我正在制作一个应用程序,其中通过每5秒一次的间隔HTTP请求收集来自虚拟机的与CPU使用、内存使用、磁盘使用等相关的数据。收集的数据如下所示: 我在Drools Fusion上创建了一些规则,试图看到以下内容:例如,当CPU使用率在过去10秒内达到10%以上时,然后在屏幕上打印一些东西,但我的问题是,即使我在规则中输入了命令,即使尚未通过,规则仍然被触发。这是CPU使用率的规则: 是从HTTP响应
介绍 将TCP与UDP这样的简单传输协议区分开来的是它传输数据的质量。TCP对于发送数据进行跟踪,这种数据管理需要协议有以下两大关键功能: 可靠性:保证数据确实到达目的地。如果未到达,能够发现并重传。 数据流控:管理数据的发送速率,以使接收设备不致于过载。 要完成这些任务,整个协议操作是围绕滑动窗口确认机制来进行的。因此,理解了滑动窗口,也就是理解了TCP。 更多信息 TCP面向流的滑动窗口确认机
我使用Laravel 5.1,逻辑是:用户上传图像。它不在公共目录中,而是在存储目录中(因为我读到存储目录是私有的)。我想把图像的路径放在src="属性中,但没有找到图像。我尝试过: 但是没有成功。。。为什么找不到图片?
我有一个小问题,一个小jQuery脚本,我的幻灯片图像。该脚本本身工作得非常好,其目的是在图像之间滚动,实际上是“淡入淡出”,这是一部经典之作。 问题是,如果我想将它用于页面上的另一个块,那么它将不再正常工作。。问题当然出在id上,但无法解决。 这是脚本: 有什么想法吗?谢谢大家:)
目标 用各种低通滤波器模糊图像 将定制滤波器应用于图像(二维卷积) 二维卷积(图像滤波) 与一维信号一样,图像也可以用各种低通滤波器(LPF),高通滤波器(HPF)等进行滤波。LPF有助于消除噪声,模糊图像等。HPF滤波器有助于找到图片的边缘。 OpenCV 提供了一个函数 cv2.filter2D() 来将一个内核与一个图像进行卷积。作为例子,我们将尝试在图像上使用平均过滤器。一个 5x5 的平