我正在尝试将图像从笛卡尔坐标转换为极坐标,以便可以解开该图像,但出现运行时错误。如果您对外观感到好奇,请参阅this example.

码:

import scipy
import scipy.ndimage
import numpy as np
from math import *
import cv2

def logpolar(input):
    # This takes a numpy array and returns it in Log-Polar coordinates.

    coordinates = np.mgrid[0:max(input.shape[:])*2,0:360] # We create a cartesian array which will be used to compute log-polar coordinates.
    log_r = 10**(coordinates[0,:]/(input.shape[0]*2.)*log10(input.shape[1])) # This contains a normalized logarithmic gradient
    angle = 2.*pi*(coordinates[1,:]/360.) # This is a linear gradient going from 0 to 2*Pi

    # Using scipy's map_coordinates(), we map the input array on the log-polar coordinate. Do not forget to center the coordinates!
    lpinput = scipy.ndimage.interpolation.map_coordinates(input,(log_r*np.cos(angle)+input.shape[0]/2.,log_r*np.sin(angle)+input.shape[1]/2.),order=3,mode='constant')

    # Returning log-normal...
    return lpinput


# Load image
image = cv2.imread("test.jpg")
result = logpolar(image)

控制台中的错误消息:

追溯(最近一次通话):
中第23行的文件“test.py”
结果=对数极坐标(图像)
文件“test.py”,第15行,对数极性
lpinput = scipy.ndimage.interpolation.map_coordinates(input,(log_r * np.cos(angle)+ input.shape [0] /2.,log_r*np.sin(angle)+ input.shape [1] / 2。 ),order = 3,mode ='constant')
文件“/Library/Python/2.7/site-packages/scipy-0.13.0.dev_c31f167_20130415-py2.7-macosx-10.8-intel.egg/scipy/ndimage/interpolation.py”,第295行,在map_coordinates中
引发RuntimeError('无效的坐标数组形状')
RuntimeError:坐标数组的形状无效

最佳答案

我的第一个猜测是您要传递的是3维彩色图像。乍一看,我认为您的代码无法解决这个问题。

我的猜测是基于您粘贴的错误,特别是
“坐标数组的形状无效”
当使用类似这样的高维数组时,通常必须传递额外的参数,以指定要在其上重复操作的轴,有时甚至不起作用。我没有在参数列表的末尾看到重复的额外整数,因此我发现您不是在试图显式地处理这种情况,并且可能已经忘记在读取图像后检查数组的维数了。

很高兴它有所帮助:)

关于python - 无法在OpenCV中解包图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16654083/

10-11 07:42
查看更多