[Python] 'The parameter `image` must be a 2-dimensional array'

Discussão em 'Python' iniciado por Stack, Abril 16, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to extract orb features via scikit-image, but I got the error The parameter image must be a 2-dimensional array. I converted it to greyscale so the image is actually 2-dimensional.

    from skimage.feature import ORB
    from skimage.color import rgb2gray

    def find_orb(img, n_keypoints=2000, **kwargs):
    descriptor_extractor = ORB(n_keypoints, **kwargs)
    descriptor_extractor.detect_and_extract(rgb2gray(img))
    return descriptor_extractor.keypoints, descriptor_extractor.descriptors

    pano_image_collection = io.ImageCollection('jpeg/lowres/8_*.jpg',
    load_func=lambda f:io.imread(f).astype(np.float32) / 255)
    img = pano_image_collection[0]
    keypoints, descriptors = find_orb(img)


    And this is the error

    ValueError Traceback (most recent call last)
    <ipython-input-5-5dce31f8d3f4> in <module>()
    ----> 7 keypoints, descriptors = find_orb(img)

    <ipython-input-4-26e09ccf38ce> in find_orb(img, n_keypoints, **kwargs)
    14 descriptor_extractor = ORB(n_keypoints, **kwargs)
    ---> 15 descriptor_extractor.detect_and_extract(rgb2gray(img))
    16 return descriptor_extractor.keypoints, descriptor_extractor.descriptors

    /usr/local/lib/python3.6/site-packages/skimage/feature/orb.py in detect_and_extract(self, image)
    302
    303 keypoints, orientations, responses = \
    --> 304 self._detect_octave(octave_image)
    305
    306 if len(keypoints) == 0:

    /usr/local/lib/python3.6/site-packages/skimage/feature/orb.py in _detect_octave(self, octave_image)
    139 # Extract keypoints for current octave
    140 fast_response = corner_fast(octave_image, self.fast_n,
    --> 141 self.fast_threshold)
    142 keypoints = corner_peaks(fast_response, min_distance=1)
    143

    /usr/local/lib/python3.6/site-packages/skimage/feature/corner.py in corner_fast(image, n, threshold)
    745
    746 """
    --> 747 image = _prepare_grayscale_input_2D(image)
    748
    749 image = np.ascontiguousarray(image)

    /usr/local/lib/python3.6/site-packages/skimage/feature/util.py in _prepare_grayscale_input_2D(image)
    140 def _prepare_grayscale_input_2D(image):
    141 image = np.squeeze(image)
    --> 142 assert_nD(image, 2)
    143 return img_as_float(image)
    144

    /usr/local/lib/python3.6/site-packages/skimage/_shared/utils.py in assert_nD(array, ndim, arg_name)
    176 raise ValueError(msg_empty_array % (arg_name))
    177 if not array.ndim in ndim:
    --> 178 raise ValueError(msg_incorrect_dim % (arg_name, '-or-'.join([str(n) for n in ndim])))
    179
    180

    ValueError: The parameter `image` must be a 2-dimensional array

    Continue reading...

Compartilhe esta Página