Не уверен, почему я получаю индекс выходит за пределы для оси с ошибкой размера с OpenCV - PullRequest
0 голосов
/ 30 июня 2019

Я выполняю некоторую обработку изображений в openCV, и получаю индекс «Вне границ для оси с ошибкой размера».

Я попытался добавить в

if(i+1 < len(img2) and j+1 < len(img2[0])):

, чтобы убедиться, что мы находимся в границах массива, но я бы просто пропустил каждый элемент массива.

Я попытался удалить 0 и сделать его просто

for i in range(imgCol):

стиль петли.

Я также пытался уменьшить длину массива

for i in range(imgCol-1):

но ошибка сохраняется.

Вот мой текущий код.

img2 = cv2.imread('v2.jpg')

imgRow = img2.shape[0]
imgCol = img2.shape[1]

for i in range(0,imgCol):
    for j in range(0,imgRow):
        if ( img2[i,j,0] == 11 and img2[i,j,1] == 2 and img2[i,j,2] == 12):
            '''do something'''


Ответы [ 2 ]

0 голосов
/ 30 июня 2019

когда я запускаю это так (как предложил UdonN00dle), инвертируя строки и столбцы, я не получаю ошибки.Я не уверен в твоей проблеме формы, так как у меня нет твоего изображения

#importing a random image
from PIL import Image
import urllib.request
import numpy as np

URL = 'http://www.w3schools.com/css/trolltunga.jpg'

with urllib.request.urlopen(URL) as url:
    with open('temp.jpg', 'wb') as f:
        f.write(url.read())

img = Image.open('temp.jpg')

#the beginning of the code
img2 = np.asarray(img)


imgRow = img2.shape[0]
imgCol = img2.shape[1]
#inverted imgRow and imgCol
for i in range(0,imgRow):
    for j in range(0,imgCol):
        if ( img2[i,j,0] == 11 and img2[i,j,1] == 2 and img2[i,j,2] == 12):
            '''do something'''
0 голосов
/ 30 июня 2019

Я считаю, что ошибка в этой строке:

if ( img2[i,j,0] == 11 and img2[i,j,1] == 2 and img2[i,j,2] == 12):

Я думаю, что вы пытаетесь просмотреть каждый пиксель, и если его значение равно (11, 2, 12), сделайте что-нибудь. Изображение представляет собой трехмерный массив, вместо доступа к значению с помощью img2[i, j, 0], вы можете попробовать img[i][j][0].


Редактирование для обобщения комментариев:

  • У вас могут быть row и col в обратном порядке.
  • Еще одна опция для устранения неполадок - добавить флаг чтения cv2.IMREAD_COLOR, чтобы заставить OpenCV считывать изображение в формате BGR, хотя это по умолчанию.
...