由于大小原因,将 Python 输出传递到 C++ 输入的管道损坏了

问题描述 投票:0回答:1

我正在尝试将图像转换为c ++中的rbg值矩阵,我真的很喜欢PIL处理不同图像扩展的简单性,所以我目前有两个代码

from PIL import Image

img=Image.open("oi.png")

pixel=img.load()

width,height=img.size

print(height)
print(width)

def rgb(r, g, b):
    return ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff)

for x in range(width):
        for y in range(height):
                print(rgb(pixel[x,y][0],pixel[x,y][1],pixel[x,y][2]))

并用C++接收

#include <bits/stdc++.h>
using namespace std;
#define __ ios_base::sync_with_stdio(false);cin.tie(NULL);
int main(){__
        long long height,width;cin>>height>>width;
        unsigned long img[width][height];        
        for(long long j=0; j<height;j++) for (long long i=0; i<width;i++){
                cin>>img[i][j];
        }
return 0;}

我正在将两个槽端子连接到

python3 code.py | ./code
它适用于非常小的图像,但对于较大的图像,它会返回
BrokenPipeError: [Errno 32] Broken pipe

我该怎么办?有没有更好的方法来实现我想要实现的目标?

我想将 python 输出连接到 c++ 输入,即使输出很大,也不会出现管道损坏错误

python c++ pipe buffer-overflow
1个回答
0
投票

“损坏的管道”意味着程序尝试写入不再有任何程序从中读取的管道。这意味着您的 C++ 程序已提前退出。

对于 1000x1000 图像,假设您在 x86_64 Linux 上运行此图像,

img
为 8MB。我怀疑这对于堆栈来说太大了,这会导致您的 C++ 程序崩溃。您可以通过在堆上分配
img
来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.