Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python opencv-索引器错误:索引26超出大小为17的轴0的界限_Python_Opencv_Text Segmentation - Fatal编程技术网

Python opencv-索引器错误:索引26超出大小为17的轴0的界限

Python opencv-索引器错误:索引26超出大小为17的轴0的界限,python,opencv,text-segmentation,Python,Opencv,Text Segmentation,我正在尝试分割文本图像,但我对其中一个roi(感兴趣区域)图像有一个问题,它的尺寸是(24,3)和 (44,3)它给了我索引器:对于这个特定的图像,索引26超出了大小为17的轴0的界限。我正在使用opencv使用numpy数组分割图像。我如何解决这个问题?为什么会发生这种情况?我在这里看到过类似的答案,但你能解释一下为什么以及如何纠正它吗?或者给我-4 import os import cv2 import numpy as np import matplotlib.pyplot as plt

我正在尝试分割文本图像,但我对其中一个roi(感兴趣区域)图像有一个问题,它的尺寸是(24,3)和 (44,3)它给了我索引器:对于这个特定的图像,索引26超出了大小为17的轴0的界限。我正在使用opencv使用numpy数组分割图像。我如何解决这个问题?为什么会发生这种情况?我在这里看到过类似的答案,但你能解释一下为什么以及如何纠正它吗?或者给我-4

import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
#import image
image = cv2.imread('wonde_1.png')
#cv2.imshow('orig',image)
#cv2.waitKey(0)

#grayscale
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
cv2.waitKey(0)

#binary
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow('second',thresh)
cv2.waitKey(0)

#dilation
kernel = np.ones((5,5), np.uint8)
img_dilation = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow('dilated',img_dilation)
cv2.waitKey(0)

#find contours
im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

#sort contours
sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])

for i, ctr in enumerate(sorted_ctrs):
    # Get bounding box
    x, y, w, h = cv2.boundingRect(ctr)

    # Getting ROI
    roi = image[y:y+h, x:x+w]

    # show ROI
    #cv2.imshow('segment no:'+str(i),roi)
    filename='crop/file_%i.png'%i
    print(roi[26].shape)
    #cv2.imwrite(filename,roi[i])


    #am_char=input()
    #cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
    cv2.waitKey(0)

cv2.imshow('marked areas',image)
cv2.waitKey(0)

我不需要
roi[I]
,只要roi就足够了,因为
roi
本身就是iterable

我不会调试你的代码,但是如果你分割你的图像并生成一个新的roi,你不认为如果你的roi小于26,就有越界访问的危险吗?@EdChum,你能用简单的英语解释一下吗?显然存在一种危险,这就是为什么看起来像
roi
(具有高度
h
和宽度
w
)的维度的错误可能不允许
26
的索引存在,因此行
打印(roi[26]。形状)
将抛出错误。错误告诉您数组的大小为17,但您试图访问26(第27项),但该项不存在。你已经硬编码了你的索引,没有检查它是否超出范围,基本上投资回报率小于26@Kaleab确实,您正在迭代许多较小的图像,但是其中一些图像太小了。因此,对于其中一些,当你创建
roi
时,你给它维度
[y:y+h,x:x+w]
所以如果你看
roi.shape
,它会说(例如)
roi.shape=(13,17,3)
,这意味着它有13个元素,每个元素有17个元素,每个元素有3个元素。然后,您尝试打印
roi[26]
的形状,该形状不存在,因为
roi
只有13个元素,因此26是不允许的。