欢迎您访问
最编程
本站为您分享编程语言代码,编程技术文章!
1.unshift()向数组开头添加一个或者多个元素,并返回新的数组的长度,但是注意:unshift不创建新的数组,而是直接修改原来的数组
function prepend(arr, item) {
var m = arr.slice();
m.unshift(item);
return m;
}
2.apply()对数组进行参数序列化
function prepend(arr, item) {
var m = [];
[].push.apply(m,arr);
m.unshift(item);
return m;
}
3.直接利用apply将item数组放在arr的开头
function prepend(arr, item) {
var m = [item];
[].push.apply(m,arr);
return m;
}
4.利用splice的第二个参数为0,来达到添加元素的作用
function prepend(arr, item) {
var m = arr.slice();
m.splice(0,0,item);
return m;
}
5.利用concat数组合并生成新的数组
function prepend(arr, item) {
return [item].concat(arr);
}
6.利用push将item放入数组
function prepend(arr, item) {
var m = [item];
for (var i = 0 ; i < arr.length; i++){
m.push(arr[i]);
}
return m;
}
另外:关于apply实现数组最值以及合并
https://www.cnblogs.com/airbreak/p/4595424.html
推荐阅读
-
14-傅里叶变换的代码实现-一、numpy实现傅里叶变换和逆傅里叶变换
1.numpy实现傅里叶变换numpy.fft.fft2实现傅里叶变换,返回一个复数数组(complex ndarray),也就是频谱图像numpy.fft.fftshift将零频率分量移到频谱中心(将左上角的低频区域,移到中心位置)
20*np.log(np.abs(fshift))设置频谱的范围。可以理解为,之前通过傅里叶变换得到复数的数组,是不能通过图像的方法展示出来的,需要转换为灰度图像(映射到[0,255]区间)需要注意的是1> 傅里叶得到低频、高频信息,针对低频、高频处理能够实现不同的目的2> 傅里叶过程是可逆的,图像经过傅里叶变换、逆傅里叶变换后,能够恢复到原始图像3> 在频域对图像进行处理,在频域的处理会反映在逆变换图像上
# 将绘制的图显示在窗口
%matplotlib qt5
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(r"image\lena.bmp",cv2.IMREAD_GRAYSCALE)
# 傅里叶变换
f = np.fft.fft2(img)
# 移动中心位置
fshift = np.fft.fftshift(f)
# 调整值范围
result = 20*np.log(np.abs(fshift))
plt.subplot(1,2,1)
plt.imshow(img,cmap=plt.cm.gray)
plt.title("original")
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(result,cmap=plt.cm.gray)
plt.title("result")
plt.axis("off")
plt.show
傅里叶变换的频谱图像:
2.numpy实现逆傅里叶变换numpy.fft.ifft2实现逆傅里叶变换,返回一个复数数组(complex ndarray)numpy.fft.ifftshiftfftshift函数的逆函数,将中心位置的低频,重新移到左上角iimg = np.abs(逆傅里叶变化结果)设置值的范围,映射到[0,255]区间
# 将绘制的图显示在窗口
%matplotlib qt5
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(r"image\boat.bmp",cv2.IMREAD_GRAYSCALE)
# 傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 逆傅里叶变换
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
plt.subplot(1,2,1)
plt.imshow(img,cmap=plt.cm.gray)
plt.title("original")
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(iimg,cmap=plt.cm.gray)
plt.title("iimg")
plt.axis("off")
plt.show
将一副图像,进行傅里叶变换和逆傅里叶变换后,进行对比(一样的)
实例:通过numpy实现高通滤波,保留图像的边缘信息
获取图像的形状rows,cols = img.shape获取图像的中心点crow,ccol = int(rows/2),int(cols/2)将频谱图像的中心区域(低频区域)设置为0(黑色)fshift[crow-30:crow+30,ccol-30:ccol+30] = 0
# 将绘制的图显示在窗口
%matplotlib qt5
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(r"image\boat.bmp",cv2.IMREAD_GRAYSCALE)
# 傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 高通滤波
rows,cols = img.shape
crow,ccol = int(rows/2),int(cols/2)
fshift[crow-30:crow+30,ccol-30:ccol+30] = 0
# 逆傅里叶变换
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
plt.subplot(1,2,1)
plt.imshow(img,cmap=plt.cm.gray)
plt.title("original")
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(iimg,cmap=plt.cm.gray)
plt.title("iimg")
plt.axis("off")
plt.show
使用numpy实现高通滤波的实验结果:
二、opencv实现傅里叶变换和逆傅里叶变换
1.opencv实现傅里叶变换
返回结果 = cv2.dft(原始图像,转换标识)1> 返回结果:是双通道的,第一个通道是结果的实数部分,第二个通道是结果的虚数部分2> 原始图像:输入图像要首先转换成np.float32(img)格式3> 转换标识:flags = cv2.DFT_COMPLEX_OUTPUT,输出一个复数阵列numpy.fft.fftshift将零频率分量移到频谱中心(将左上角的低频区域,移到中心位置)调整频谱的范围,将上面频谱图像的复数数组,转换为可以显示的灰度图像(映射到[0,255]区间)返回值 = 20*np.log(cv2.magnitude(参数1,参数2))1> 参数1:浮点型X坐标值,也就是实部2> 参数2:浮点型Y坐标值,也就是虚部
# 将绘制的图显示在窗口
%matplotlib qt5
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(r"image\lena.bmp",cv2.IMREAD_GRAYSCALE)
# 傅里叶变换
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
# 移动中心位置
dftShift = np.fft.fftshift(dft)
# 调整频谱的范围
result = 20*np.log(cv2.magnitude(dftShift[:,:,0],dftShift[:,:,1]))
plt.subplot(1,2,1)
plt.imshow(img,cmap=plt.cm.gray)
plt.title("original")
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(result,cmap=plt.cm.gray)
plt.title("result")
plt.axis("off")
plt.show
傅里叶变换的频谱图像:
2.opencv实现逆傅里叶变换返回结果 = cv2.idft(原始数据)1> 返回结果:取决于原始数据的类型和大小2> 原始数据:实数或者复数均可numpy.fft.ifftshiftfftshift函数的逆函数,将中心位置的低频,重新移到左上角调整频谱的范围,映射到[0,255]区间返回值 = cv2.magnitude(参数1,参数2)1> 参数1:浮点型X坐标值,也就是实部2> 参数2:浮点型Y坐标值,也就是虚部
# 将绘制的图显示在窗口
%matplotlib qt5
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(r"image\lena.bmp",cv2.IMREAD_GRAYSCALE)
# 傅里叶变换
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)
# 逆傅里叶变换
ishift = np.fft.ifftshift(dftShift)
iimg = cv2.idft(ishift)
iimg = cv2.magnitude(iimg[:,:,0],iimg[:,:,1])
plt.subplot(1,2,1)
plt.imshow(img,cmap=plt.cm.gray)
plt.title("original")
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(iimg,cmap=plt.cm.gray)
plt.title("inverse")
plt.axis("off")
plt.show
将一副图像,进行傅里叶变换和逆傅里叶变换后,进行对比(一样的)
实例:通过opencv实现低通滤波,模糊一副图像
-
简易讲解:在JavaScript中添加数组元素的三种方式
-
简易讲解:在JavaScript中添加数组元素的三种方法
-
在 Java 中向数组添加新元素的步骤
-
在Java中向数组添加新元素的方法指南
-
在JavaScript里,有哪些给数组添加元素的技巧或方法?
-
如何轻松地在JavaScript中向数组添加元素及项的属性(简单易理解)
-
在Java中如何给数组添加元素的方法
-
在 Java 中向数组添加新元素的方法
-
在React中向状态数组添加新元素的实用技巧