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