Сломанный канал, передающий выходные данные Python на вход 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 к входу С++ даже с большими выходами без ошибки сломанного канала.

Каковы размеры изображения, на котором он не работает?

Joseph Sible-Reinstate Monica 16.06.2024 02:47

Если width и height являются long long, то почему i и jint?

Joseph Sible-Reinstate Monica 16.06.2024 02:48

@JosephSible-ReinstateMonica изменила это! я пытаюсь работать с изображениями 1000x1000

Leonardo Dantas 16.06.2024 03:09
unsigned long img[width][height]; — недействителен стандарт C++. См.: Почему массивы переменной длины не являются частью стандарта C++?.
wohlstad 16.06.2024 07:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
5
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

«Разбитый канал» означает, что программа попыталась выполнить запись в канал, из которого больше не было программ, читающих данные. Это означает, что ваша программа C++ завершается раньше, чем должна.

Для изображения размером 1000x1000, если вы используете его на Linux x86_64, img составляет 8 МБ. Я подозреваю, что он слишком велик для стека, что приводит к сбою вашей программы на C++. Вы можете это исправить, выделив img в куче.

Другие вопросы по теме