python - 如何在python中扭曲图像?
解决方案
它看起来像是scipy.ndimage.geometric_transform的任务。考虑以下示例,使用
1 2
3 4
作为输入二维数组
t = np.array([[1,2],[3,4]],dtype='uint8') #our input array
def func(x):
return (x[1],x[0])
out = scipy.ndimage.geometric_transform(t,func)
print(out)
输出:
[[1 3]
[2 4]]
那么发生了什么?对于输入中的每个单元格,func
计算该单元格位置(元组)作为参数,并将其输出用作单元格的新位置,记住索引从 0 开始并且它们是 y,x 方式:
- 1个位置是0,0
- 2位置是0,1
- 3 位置是 1,0
- 4位置是1,1
我的示例函数只是用 x 切换 y 所以
- 1 个新位置是 0,0
- 2个新位置是1,0
- 3个新位置是0,1
- 4个新位置是1,1
您确实可以在输出中看到。
使用cv2.imread
函数,您可以轻松地将图像读入 numpy 数组,如果您只想转换灰度图像,这会使事情变得更简单,因为您将处理 2D 数组而不是 3D 数组。记住 在加载灰度图像时使用cv2.imread('someimage.bmp',0)
(作为第二个参数)。0
主要挑战是创建函数:假设灰度其输入是 2 元组 - “供体”像素的位置,输出是 2 元组 - “接收者”的位置,请注意,此函数不必覆盖整个输出区域 - 以防万一输出像素缺少“供体”,它被插值。
推荐阅读
- java - 关闭 WDropTargetContextPeerFileStream 并出现堆损坏时 Java 崩溃
- python - 如何获得熊猫数据框中k个连续行的总和?
- machine-learning - 在向后传递 Google-JAX 中保存梯度
- python - 如何删除对已关闭窗口的所有引用?
- c - printf 中的填充(浮点数)
- kubernetes - 新版 Rancher 只能用于本地集群吗?
- php - 了解 strpos、preg_replace 和 preg_match 函数
- flutter - Flutter Getx Snackbar 不工作
- c - 有效类型的限定符有哪些规则?
- installation - 如何在 Google Colab 上安装 Zipline