+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何基于给定的csv文件将像素值转换为另一个值?

发布于2020-08-04 18:36     阅读(371)     评论(0)     点赞(19)     收藏(5)


我有一个2D图像标签(值从0到20)。我想根据csv文件中的表格将图像中的像素值更改为另一个值

Original value     New value

0                      0
1                      23
2                      2
3                      11
4                      11
5                      15
...

我们可以通过简单的方式做到

label[label==0]=0
label[label==1]=23
label[label==2]=2
label[label==3|label==4]=11
label[label==5]=15

对于上述方法,我至少需要20行进行转换,并仔细查看CSV文件中的表以填写条件中的值。我们有更好的方法吗?我正在使用python 3.6

更新: csv文件喜欢

label1, 0, 0
label2, 1, 23
label3, 2, 2
label4, 3, 11
label5, 4, 11
label6, 5, 15

第一行只是名称,我们不在乎


解决方案


使用numpy数组:

import numpy as np

Data = np.arange(25).reshape((5,5))

#Data
#array([[ 0,  1,  2,  3,  4],
#       [ 5,  6,  7,  8,  9],
#       [10, 11, 12, 13, 14],
#       [15, 16, 17, 18, 19],
#       [20, 21, 22, 23, 24]])

switch = np.loadtxt('./test.txt', comment='#')

switch现在包含6行,其中旧数字为第一个元素,新数字为第二个元素。通过遍历行数,我们可以更改像素值:

for i in range(switch.shape[0]):
    Data[Data == switch[i, 0]] = switch[i, 1]

#Data
#array([[ 0, 23,  2, 11, 11],
#       [15,  6,  7,  8,  9],
#       [10, 11, 12, 13, 14],
#       [15, 16, 17, 18, 19],
#       [20, 21, 22, 23, 24]])

test.txt:

#old                  new
0                      0
1                      23
2                      2
3                      11
4                      11
5                      15

编辑:

如果您的数据位于.csv文件中(如您更新的问题中所示),只需调整loadtxt调用即可:

switch = np.loadtxt('./text.txt', usecols=(1,2), delimiter=',')

这样,我们将忽略第一列(numpy不适用于混合类型(浮点和字符串)的数组),并将定界符从空格更改为逗号。注意:文件扩展名在这里并不重要,它可以是.txt或.csv或其他任何文件。仅文件内容很重要。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/471389/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)