python - 在 Python 中从多个图像中绘制 3D 数据
问题描述
我正在尝试创建一个堆叠多个图像的 3D 矩阵,以创建密度的 3D 可视化,以便插入这些数据和其他操作......现在我正在尝试使用以下代码堆叠图像:
import numpy as np
import matplotlib.pyplot as plt
stacked = np.ndarray(shape=(300,300,20))
for s in range(11):
s=s+1
source = cv2.imread('IMAGE_#'+ str(s) +'.png',0)
m = np.asmatrix(source)
stacked[:,:,s]=m
x=stacked[:,0]
y=stacked[:,1]
z=stacked[:,2]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x,y,z)
plt.xlim(0,300)
plt.ylim(0,300)
plt.show()
但情节导致这样的 错误情节
虽然我期待图表中间有一团点。我究竟做错了什么?
编辑 1> 要测试代码,请随意'Image Stacking\StarM '+ str(s) +'.png',0
在第 10 行使用此图像:
https ://wetransfer.com/downloads/7a3cdac121427d122787b5e24943d4b320210412123454/edfcc9
编辑 2> 更改代码如下:
import numpy as np
import matplotlib.pyplot as plt
stacked = np.ndarray(shape=(300,300,20))
for s in range(11):
s=s+1
source = cv2.imread('ss\StarM '+ str(s) +'.png',2)
m = np.asmatrix(source)
stacked[:,:,s]=m
x=stacked[:,:,0]
y=stacked[:,:,1]
z=stacked[:,:,2]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x,y,z)
plt.xlim(0,300)
plt.ylim(0,300)
plt.show()
现在情节显示:WrongPlot2
谢谢
解决方案
好吧不得不从枕头开始重写我不知道opencv。
这是我的代码:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
size_image = Image.open('StarM 1.png', 'r')
print(size_image.size)
stacked = np.ndarray(shape=(size_image.size[0], size_image.size[1], 11)) #empty array
for s in range(11):
s = s+1
source = Image.open('StarM ' + str(s) + '.png', 'r').convert('L') #open image convertiung it to grayscale
# source.show() #show grayscale image
# print('source :', source) #print image
m = np.asarray(source) #convert image to array
print(m) #print array
print(m.shape) #print array shape
stacked[:, :, s-1] = m #fill empty array with image
# print(stacked)
print(stacked.shape) #print array shape
x,y,z =stacked.nonzero() #gets non zero values from stacked
print(x,y,z)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x,y,z)
plt.show()
结果是:
不知道你期待的是什么让我知道。
将第 47 行更改为
x,y,z =(stacked > 100).nonzero() #gets >100 values from stacked
值范围从 0 到 255(请记住,我们使用的是 8 位灰度 0 - 255)
你会得到更好的照片:
推荐阅读
- function - Power Query — 替换列标题中多个字符的所有实例
- java - 使用 commitSync 时,是什么导致重复消息被退回?
- paypal - Pay Pal webhook 从未调用过
- javascript - 谷歌视觉 api annotateImage 返回空
- javascript - 在本机反应中将数据传递给模态
- c# - C# filesystemwatcher 在执行逻辑时是否停止?
- python - 如何以 python 日期时间格式指定历史日期
- awk - 从文件中提取两种不同类型的值并将其打印到输出文件
- algorithm - 是否可以仅使用 O(n) <-comparisons 在 < 上提取二叉搜索树的给定前序和后序的有序?
- r - 由于奇点,未定义 glm 中的随机因子