我正在尝试将图像转换为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++ 输入,即使输出很大,也不会出现管道损坏错误
“损坏的管道”意味着程序尝试写入不再有任何程序从中读取的管道。这意味着您的 C++ 程序已提前退出。
对于 1000x1000 图像,假设您在 x86_64 Linux 上运行此图像,
img
为 8MB。我怀疑这对于堆栈来说太大了,这会导致您的 C++ 程序崩溃。您可以通过在堆上分配 img
来解决这个问题。