0

我的代码在 .tiff 图像上计算 Hu 矩。我需要删除输出中的指数(科学)符号,如下所示:

2.84737313535e-05
1.25610416364e-09
1.25419253619e-09
1.57419718046e-18
6.69242940524e-12
4.17512050223e-22

  def humoments(self):               #function for HuMoments computation
     for filename in glob.iglob ('*.tif'):
      img = cv.LoadImageM(filename, cv.CV_LOAD_IMAGE_GRAYSCALE)
      cancer = cv.GetHuMoments(cv.Moments(img))
      #arr = cancer
      arr = numpy.array([cancer])
     with open('hu.csv', 'wb') as csvfile:
      for elem in arr.flat[:50]:
    #print('{}\t'.format(elem))  #this code puts the result to console
       writer = csv.writer(csvfile, delimiter=' ', quotechar='|',        quoting=csv.QUOTE_MINIMAL)
       writer.writerow([('{}\t'.format(elem))])

感谢你们对我的帮助

4

2 回答 2

2

您可以调用以下命令,而不是使用 csv 创建文件np.savetxt

>>> import numpy as np
>>> arr = np.array([2.84e-05, 6.69e-12])
>>> np.savetxt('/tmp/out', arr, fmt='%.14f')

生产

0.00002840000000
0.00000000000669

因此,在您的情况下,要写出 arr 的前 50 个元素,请使用:

np.savetxt('hu.csv', arr.flat[:50], fmt='%.14f')

代替

with open('hu.csv', 'wb') as csvfile:
  for elem in arr.flat[:50]:
#print('{}\t'.format(elem))  #this code puts the result to console
   writer = csv.writer(csvfile, delimiter=' ', quotechar='|',        quoting=csv.QUOTE_MINIMAL)
   writer.writerow([('{}\t'.format(elem))])

注意:与您的原始代码不同,np.savetxt不会在每一行的末尾放置一个制表符。但是,你为什么要一个?

于 2013-07-01T19:11:34.997 回答
1

改变

writer.writerow([('{}\t'.format(elem))])

writer.writerow([('{0:.10f}\t'.format(elem))])

在这里你可以找到 Python 中字符串格式的解释。

于 2013-07-01T19:09:12.240 回答