You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Shi-Tomasi与corner_peaks报错AttributeError求助

解决Shi-Tomasi角点检测后调用corner_peaks的AttributeError问题

嘿,我看到你遇到的问题了,这个错误其实是个很常见的新手小失误——你不小心把函数名当成了变量传给corner_peaks啦!让我给你拆解一下问题,再把代码改对:

错误原因分析

你定义了一个名为corners_map的函数来生成Shi-Tomasi角点响应图,但在corner_peaks函数里,你直接写了feature.corner_peaks(corners_map)——这里传入的是函数对象,而不是corners_map函数运行后生成的角点响应数组。corner_peaks需要的是一个数值数组,它尝试对传入的函数调用.flat属性,自然就报错了。

另外你的代码还有几个小问题:

  • corner_peaks函数里用到的RGB和RGBimg没有定义,得从corners_map的结果或者原图像里获取
  • 画图的逻辑有点混乱,比如重复创建了figure

修正后的完整代码

from skimage import color, feature, img_as_float
import matplotlib.pyplot as plt
import matplotlib.cm as cm

def get_corners_map(image):
    # 重命名函数,避免和变量名冲突
    # 转灰度图并转为浮点型
    gray_img = img_as_float(color.rgb2gray(image))
    # 生成Shi-Tomasi角点响应图
    corner_response = feature.corner_shi_tomasi(gray_img, 10)
    # 绘制响应图
    plt.figure(figsize=(12,6))
    plt.subplot(121)
    plt.imshow(gray_img, cmap=cm.gist_gray)
    plt.title('Original image')
    plt.subplot(122)
    plt.imshow(corner_response, cmap=cm.jet)
    plt.colorbar(orientation='horizontal')
    plt.title('Corners map')
    # 返回响应图和灰度图,供后续使用
    return corner_response, gray_img

def detect_corner_peaks(image):
    # 先调用函数获取角点响应图和灰度图
    corner_response, gray_img = get_corners_map(image)
    # 传入响应图给corner_peaks
    corners = feature.corner_peaks(corner_response)
    # 绘制检测结果
    plt.figure(figsize=(12,6))
    plt.subplot(121)
    plt.imshow(gray_img, cmap=cm.gist_gray)
    plt.title('Original image')
    plt.subplot(122)
    plt.imshow(gray_img, cmap=cm.gist_gray)
    plt.scatter(corners[:,1], corners[:,0], s=30, c='red', marker='x')
    plt.title('skimage.feature.corner_peaks result')
    plt.show()

# 调用示例(假设image1是你的输入图像)
# detect_corner_peaks(image1)

关键修改点说明

  • 函数名重命名:把原来的corners_map改成get_corners_map,避免和生成的响应图变量名冲突,这是解决错误的核心
  • 返回必要数据:让get_corners_map返回角点响应图和灰度图,这样detect_corner_peaks就能直接使用这些变量,不用重新定义
  • 正确传入参数:在detect_corner_peaks里,把get_corners_map返回的corner_response(也就是角点响应数组)传给feature.corner_peaks
  • 修复绘图逻辑:统一了figure的创建,并且给散点图加了颜色和标记,让角点更明显

这样修改后,应该就能正常运行,不会再出现那个AttributeError啦!

内容的提问来源于stack exchange,提问作者MOA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:42:00