我正在尝试编写代码,将RGB图像数组(H,W,C)转换为格式为“RGB(r,g,b)"的2D数组,然后将其转换为pandas DataFrame。我的代码几乎可以正常工作,除了一些蓝色值似乎从最终结果中丢失,我不知道为什么。我如何转换数据并维护所有信息?
image = io.imread('px.jpg')
# Convert the 3D array to a 2D array of RGB strings
rgb_strings_array = np.apply_along_axis(lambda row: f"RGB({int(row[0])}, {int(row[1])}, {int(row[2])})", axis=2, arr=image)
# Create a DataFrame with the RGB strings array
df = pd.DataFrame(rgb_strings_array, columns=range(rgb_strings_array.shape[1]))
字符串
输出(在Excel中):
的数据
您可以看到保存的数据中缺少一些蓝色值(这不是Excel问题,因为pandas DataFrame也缺少信息)。
1条答案
按热度按时间tf7tbtn21#
问题是
np.apply_along_axis
生成的是一个dtype="<U12"
数组,也就是一个12个字符的Unicode。问题是一些RGB字符串比这个长,所以它们被切断了。真的,你不应该使用numpy来处理字符串。解析可以在原生Python中轻松完成,结果仍然可以转换为pandas DataFrame。字符串
测试结果:
| 0 | 1 | 2 | 3 |
| --|--|--|--|
| 0 |RGB(22,197,166)|RGB(111,110,218)|RGB(21,177,51)|
| 1 |RGB(187,194,182)|RGB(200,130,32)|RGB(214,114,127)|
| 2 |RGB(199,164,102)|RGB(209,139,113)|RGB(114,57,23)|
| 3 |RGB(218,211,70)|RGB(161,42,193)|RGB(178,90,17)|