2017-11-30 1 views
1

저는 파이썬으로 프로그래밍하는 데 익숙하며 친구에게 c로 프로그래밍하는 방법을 가르치려고합니다. 나는 그에게 기초를 가르쳐 줄 수 있었지만 곧 그를 도와 줄 수 있기를 바라고있는 시험이있다. 그러나 나는 파이썬에서 c로 어떤 코드를 변환하는 데 어려움을 겪고있다. 예를 들어 주어진 한 가지 질문.픽셀을 흑백으로 변환합니다.

프로그램은 루프를 사용하여 pixelsIn.txt.file의 그레이 스케일 픽셀 값을 읽어야합니다. 파일의 행은 프로그램에 의해 읽 t집니다. 이미지 본문에는 그림의 각 바디의 그레이 스케일 값이 포함되어 있으며 프로그램에서 픽셀 값이 110인지 여부를 확인해야합니다. 그렇다면 프로그램에서이 픽셀 값을 225 (흰색)로 변환해야합니다. 그렇지 않으면 변환해야합니다 0 (검은 색)으로 돌아갑니다. 내가 파이썬에서 나는 각 라인에서 읽을 것이라고 할 있었다면

enter image description here

는 선을 분할하고 번호가 110인지 아닌지 확인하기 위해 루프를 사용합니다. 그러나 이것이 C로 어떻게 처리되는지는 확실하지 않습니다. 만약 내가 모호하다면 미안하지만 내가 충분히 명확하지 않은 경우 나는 어떤 질문에 대답 할 것이다. 어떤 도움이라도 대단히 감사하겠습니다.

예를 들어, 왼쪽의 다음 작은 이미지에서 문자 H는 픽셀 값 110을 사용하여 인코딩됩니다. 주변 픽셀의 그레이 스케일 값이 매우 가깝기 때문에 왼손 이미지에는 명확하지 않습니다. 메시지 픽셀 값이 오른쪽에 이미지가 다음 숨겨진 H를 보여줍니다 255 (흰색)으로 변경하고 비 메시지 픽셀 값이 0 (검은 색)로 변경하는 경우 명확하게

+1

개념적으로 똑같은 일을합니다. 차이점은 구문과 API에 있습니다. – dbush

+0

샘플 이미지와 예상 결과를 게시 할 수 있습니까? – Marco

+0

예, 정확히 붙어있는 곳입니다. C 구문과 API에 대해 확실하지 않습니다. – catherine

답변

1

난 당신이 이미 고려할 것 FILE *image에 이미지를 열고 이미지의 P2 헤더를 읽고 폭을 int width, 높이를 int height으로 저장하고 최대 강도 255을 읽습니다.

fscanf을 사용하여 image의 각 픽셀을 반복해야 각 정수를 읽을 수 있습니다. 여기에 C에서 샘플 코드입니다 : 그 후

int i, j, **matrix = malloc(height * sizeof(int *)); 
for (i = 0; i < height; i++) { 
    matrix[i] = malloc(width * sizeof(int)) 
    for (j = 0; j < width; j++) { 
     int pixel; 
     fscanf(image, "%d", &pixel); 
     matrix[i][j] = (pixel == 110) ? 255 : 0; 
    } 
} 

, 당신의 변경된 이미지가 매트릭스에있을 것입니다. 저장하면됩니다.

희망이있었습니다.

관련 문제