鱼C论坛

 找回密码
 立即注册
查看: 1228|回复: 3

[已解决]请告诉我报错原因,并给予改正。

[复制链接]
发表于 2023-8-7 15:50:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
from skimage.segmentation import slic
from skimage.segmentation import mark_boundaries
from skimage.util import img_as_float
from skimage import io
import matplotlib.pyplot as plt
# Load the image
image = img_as_float(io.imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\seg.png'))
# Apply SLIC and extract (approximately) the supplied number of segments
segments = slic(image, n_segments = 100, sigma = 5)
# Show the output of SLIC
fig = plt.figure("Superpixels")
ax = fig.add_subplot(1, 1, 1)
ax.imshow(mark_boundaries(image, segments))
plt.axis("off")
报错:
Traceback (most recent call last):
  File "C:\Users\WINDOWS\Desktop\taiyuan\python\segement.py", line 13, in <module>
    ax.imshow(mark_boundaries(image, segments))
  File "F:\anaconda\setup\lib\site-packages\skimage\segmentation\boundaries.py", line 239, in mark_boundaries
    marked[boundaries] = color
ValueError: shape mismatch: value array of shape (3,) could not be broadcast to indexing result of shape (18932,4)

Process finished with exit code 1
最佳答案
2023-8-7 15:51:00
问题分析:
报错信息显示在执行ax.imshow(mark_boundaries(image, segments))时出现了错误。具体错误提示为:ValueError: shape mismatch: value array of shape (3,) could not be broadcast to indexing result of shape (18932,4)

错误原因:
该错误通常出现在调用mark_boundaries函数时,给定的颜色数组与边界数组的形状不匹配。在这种情况下,颜色数组有一个长度为3的维度,而边界数组带有两个维度(一个表示像素位置,另一个表示标签)。

解决方法:
修改代码中的颜色数组,确保其形状与边界数组匹配。将颜色数组由长度为3的一维数组修改为具有四个元素的二维数组。每个元素表示RGBA颜色值,其中A表示透明度。

以下是修改后的代码:
from skimage.segmentation import slicfrom skimage.segmentation import mark_boundariesfrom skimage.util import img_as_floatfrom skimage import ioimport matplotlib.pyplot as plt# Load the imageimage = img_as_float(io.imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\seg.png'))# Apply SLIC and extract (approximately) the supplied number of segmentssegments = slic(image, n_segments=100, sigma=5)# Show the output of SLICfig = plt.figure("Superpixels")ax = fig.add_subplot(1, 1, 1)# Modify the color array to match the shape of the boundaries arraycolor = [[1, 0, 0, 1]]  # Red color with opacityax.imshow(mark_boundaries(image, segments, color))plt.axis("off")plt.show()
在修改后的代码中,我们将颜色数组修改为[[1, 0, 0, 1]],代表红色和不透明度为1。这样,颜色数组的形状就与边界数组匹配了。

请尝试运行修改后的代码,查看是否可以成功显示带有颜色边界的图像。如有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-7 15:50:54 | 显示全部楼层
报错原因是在使用mark_boundaries函数时,value数组的形状与索引结果的形状不匹配。

以下是修改后的代码:
from skimage.segmentation import slic, mark_boundaries
from skimage.util import img_as_float
from skimage import io
import matplotlib.pyplot as plt

# Load the image
image = img_as_float(io.imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\seg.png'))

# Apply SLIC and extract (approximately) the supplied number of segments
segments = slic(image, n_segments=100, sigma=5)

# Show the output of SLIC
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
ax.imshow(mark_boundaries(image, segments))

plt.axis("off")
plt.show()

修改说明:
1. 导入了正确的模块,从skimage.segmentation中导入slic和mark_boundaries函数。
2. 使用subplots创建画布,并通过ax.imshow显示图像。
3. 调整了画布大小,使得更适合显示图像。
4. 使用plt.show()函数显示图像。

请注意检查图片路径是否正确,确保图片存在,并且保持安装的库版本更新。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 15:50:57 | 显示全部楼层
报错的原因是值数组的形状与索引结果的形状不匹配。具体来说,值数组的形状为(3,),而索引结果的形状为(18932,4)。

这个错误通常是由于传递给mark_boundaries函数的颜色参数的形状不正确导致的。mark_boundaries函数期望的颜色参数是一个形状为(n, 3)的数组,其中n是边界的数量。而在这里,颜色参数的形状为(3,),与期望的形状不匹配。

要解决这个问题,你需要确保传递给mark_boundaries函数的颜色参数的形状是正确的。你可以将颜色参数重新定义为一个形状为(n, 3)的数组,其中n是边界的数量。你可以使用numpy库的reshape函数来改变数组的形状。

以下是修改后的代码:
from skimage.segmentation import slic
from skimage.segmentation import mark_boundaries
from skimage.util import img_as_float
from skimage import io
import matplotlib.pyplot as plt

# Load the image
image = img_as_float(io.imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\seg.png'))

# Apply SLIC and extract (approximately) the supplied number of segments
segments = slic(image, n_segments=100, sigma=5)

# Create an array of colors with shape (n, 3)
colors = np.random.rand(len(np.unique(segments)), 3)

# Show the output of SLIC
fig = plt.figure("Superpixels")
ax = fig.add_subplot(1, 1, 1)
ax.imshow(mark_boundaries(image, segments, color=colors))
plt.axis("off")
plt.show()

在这个修改后的代码中,我们首先使用numpy库的random.rand函数创建了一个形状为(n, 3)的随机颜色数组,其中n是边界的数量。然后,我们将这个颜色数组作为颜色参数传递给mark_boundaries函数,确保颜色参数的形状与期望的形状匹配。

希望这个解决方案对你有帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 15:51:00 | 显示全部楼层    本楼为最佳答案   
问题分析:
报错信息显示在执行ax.imshow(mark_boundaries(image, segments))时出现了错误。具体错误提示为:ValueError: shape mismatch: value array of shape (3,) could not be broadcast to indexing result of shape (18932,4)

错误原因:
该错误通常出现在调用mark_boundaries函数时,给定的颜色数组与边界数组的形状不匹配。在这种情况下,颜色数组有一个长度为3的维度,而边界数组带有两个维度(一个表示像素位置,另一个表示标签)。

解决方法:
修改代码中的颜色数组,确保其形状与边界数组匹配。将颜色数组由长度为3的一维数组修改为具有四个元素的二维数组。每个元素表示RGBA颜色值,其中A表示透明度。

以下是修改后的代码:
from skimage.segmentation import slicfrom skimage.segmentation import mark_boundariesfrom skimage.util import img_as_floatfrom skimage import ioimport matplotlib.pyplot as plt# Load the imageimage = img_as_float(io.imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\seg.png'))# Apply SLIC and extract (approximately) the supplied number of segmentssegments = slic(image, n_segments=100, sigma=5)# Show the output of SLICfig = plt.figure("Superpixels")ax = fig.add_subplot(1, 1, 1)# Modify the color array to match the shape of the boundaries arraycolor = [[1, 0, 0, 1]]  # Red color with opacityax.imshow(mark_boundaries(image, segments, color))plt.axis("off")plt.show()
在修改后的代码中,我们将颜色数组修改为[[1, 0, 0, 1]],代表红色和不透明度为1。这样,颜色数组的形状就与边界数组匹配了。

请尝试运行修改后的代码,查看是否可以成功显示带有颜色边界的图像。如有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 13:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表