七七.alpha 2022-09-27 21:41 采纳率: 100%
浏览 283
已结题

SyntaxError: 'NoneType' object is not subscriptable这种报错要怎么处理呀!求指导!

SyntaxError: 'NoneType' object is not subscriptable这种报错要怎么处理呀!求大神指导!跪谢!!!
原代码如下


# -*- coding: UTF-8 -*-
import cv2
import numpy as np
def cross_point(line1, line2):  # 计算交点函数
    #是否存在交点
    point_is_exist=False
    x=0
    y=0
    x1 = line1[0]  # 取四点坐标
    y1 = line1[1]
    x2 = line1[2]
    y2 = line1[3]

    x3 = line2[0]
    y3 = line2[1]
    x4 = line2[2]
    y4 = line2[3]

    if (x2 - x1) == 0:
        k1 = None
    else:
        k1 = (y2 - y1) * 1.0 / (x2 - x1)  # 计算k1,由于点均为整数,需要进行浮点数转化
        b1 = y1 * 1.0 - x1 * k1 * 1.0  # 整型转浮点型是关键

    if (x4 - x3) == 0:  # L2直线斜率不存在操作
        k2 = None
        b2 = 0
    else:
        k2 = (y4 - y3) * 1.0 / (x4 - x3)  # 斜率存在操作
        b2 = y3 * 1.0 - x3 * k2 * 1.0

    if k1 is None:
        if not k2 is None:
            x = x1
            y = k2 * x1 + b2
            point_is_exist=True
    elif k2 is None:
        x=x3
        y=k1*x3+b1
    elif not k2==k1:
        x = (b2 - b1) * 1.0 / (k1 - k2)
        y = k1 * x * 1.0 + b1 * 1.0
        point_is_exist=True
    return point_is_exist,[x, y]
#图片路径
imgPath="D:\\code\\deep\\deep1\\deep-pytorch\\img\\image\\0083.png"
img=cv2.imread(imgPath)
#转灰度图
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#高斯模糊
gray=cv2.GaussianBlur(gray,(3,3),0)
#边缘检测
edges = cv2.Canny(gray, 400, 400)
#霍夫变换
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 25, minLineLength=650, maxLineGap=8)
lines1 =lines[:, 0, :]# 提取为二维
for x1, y1, x2, y2 in lines1[:]:
    cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

for x1, y1, x2, y2 in lines1[:]:
    for x3,y3,x4,y4 in lines1[:]:
        point_is_exist, [x, y]=cross_point([x1, y1, x2, y2],[x3,y3,x4,y4])
        if point_is_exist:
            cv2.circle(img,(int(x),int(y)),5,(0,0,255),3)
cv2.imshow('Result', img)
cv2.waitKey (0)


运行后报错
C:\Users\COLORFUL\Anaconda3\envs\deeplabv3\python.exe D:/code/deep/deep1/deep-pytorch/交点提取.py
Traceback (most recent call last):
File "D:/code/deep/deep1/deep-pytorch/交点提取.py", line 56, in
lines1 =lines[:, 0, :]# 提取为二维
TypeError: 'NoneType' object is not subscriptable

  • 写回答

2条回答 默认 最新

  • submarineas 2022-09-28 11:52
    关注

    lines对象是NoneType,即经过霍夫变换提取出来的线是空的,那么可能前面边缘检测开始或者从图像上就有问题,可以每一行加一下打印,如果lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 25, minLineLength=650, maxLineGap=8)能出结果,那自然下一步就能转换二维

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月7日
  • 已采纳回答 9月29日
  • 修改了问题 9月27日
  • 修改了问题 9月27日
  • 展开全部

悬赏问题

  • ¥15 在codeblocks里主函数运行到打印生成的链表就结束了 没有再往下是为什么呢
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!
  • ¥20 win11账户锁定时间设为0无法登录
  • ¥45 C#学生成绩管理系统
  • ¥30 matlab appdesigner私有函数嵌套整合