1

MATLAB コードを Python に手動で変換していますが、1 行で行き詰っています。

MATLAB コード:

cashew_BW = threshad(cashew_GRAY(:,:,1),T);
cashew_BW = ~cashew_BW;
cashew_BW = imclose(cashew_BW, true(5));
cashew_BW = ~cashew_BW

Python 変換コード:

T = 112
se = [[1,1,1,1,1]]*5
cashew_BW = pymorph.threshad(cashew_GRAY, T, f2=None)
cashew_BW = np.logical_not(cashew_BW)
cashew_BW = 1*(cashew_BW)
cashew_BW = pymorph.close(cashew_BW, se)
cashew_BW = np.logical_not(cashew_BW)
cashew_BW = 1*(cashew_BW)

エラー:

Traceback (most recent call last):
  File "check1.py", line 22, in <module>
    cashew_BW = pymorph.close(cashew_BW, se)
  File "/home/keerthi/anaconda2/lib/python2.7/site-packages/pymorph-0.96-py2.7.egg/pymorph/mmorph.py", line 1303, in close
    return erode(dilate(f,Bc ),Bc )
  File "/home/keerthi/anaconda2/lib/python2.7/site-packages/pymorph-0.96-py2.7.egg/pymorph/mmorph.py", line 1580, in dilate
    x,v = mat2set(B)
  File "/home/keerthi/anaconda2/lib/python2.7/site-packages/pymorph-0.96-py2.7.egg/pymorph/mmorph.py", line 4392, in mat2set
    if len(A.shape) == 1: A = A[newaxis,:]
AttributeError: 'list' object has no attribute 'shape'

これを修正するにはどうすればよいですか?

4

1 に答える 1

0

MATLAB で行列が機能する方法は配列に似ていnumpyますが、python リストは異なります。MATLAB から来ているので、明らかではないので、python リストについてもう少し読むことをお勧めします。たとえば、次の行

se = [[1,1,1,1,1]]*5

戻りません[5,5,5,5,5]が、代わりに作成します

[[1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1]]

Python リストのデフォルトの動作は、リストの 5 倍を作成することです。表示されるエラーは、numpy 配列(形状/サイズを取得するため) が必要なときseに、python リスト (len(a)サイズを取得するため)を渡しているためです。あなたの場合、MATLABで一貫した動作を得るために、常にnumpy配列に変換する必要があります。pymorph.closea.shape

se = 5*np.array([1,1,1,1,1])

se は numpy 配列型[5,5,5,5,5]であるため、エラーが発生し、回避する必要があります。pymorph.close

于 2016-04-08T09:16:20.543 に答える