2009-10-20 2 views
5

C에서 이미지를 읽으면 픽셀을 직접 제어 할 수 있습니다 (MATLAB 에서처럼).C에서 픽셀 단위로 이미지를 조작하는 방법?

FILE *fp; 
fp = fopen("C:\\a.tif","r"); 

단지 나에게 이미지 파일 (내 생각)의 ascii 양식을 제공합니다

나는 옛날 방식을 시도했다.

어떻게 이미지를 픽셀 단위로 제어 할 수 있으며 이미지 반전과 같은 몇 가지 기본 작업을 수행 할 수 있습니까?

+1

C가 약간 낮은 수준이라고 생각하는 것 같습니다. 그 fopen은 원시 바이너리를 제공하고 있으며 바이너리를 이미지로 해석하는 방법을 알아 내거나 아래에 제안 된대로 라이브러리를 사용합니다. – Breton

+0

@Breton, 그는 이진 내용이 아닌 이러한 파일의 디코딩 방법을 구체적으로 물었습니다. 나는 프로그램이 더 빠를 때 C가 더 좋은 선택이라고 생각한다. 그렇지 않으면 파이썬은 PIL을 충분히 제공한다. – Xolve

+1

@Breton -'fopen()'은 원시 바이너리를 제공하지 않고 텍스트 모드를 제공하기 때문에 Windows에서 일부 파일을 잘못 읽을 가능성이 있습니다. –

답변

2

OpenCV은 컴퓨터 비전 라이브러리 또 다른 좋은 방법입니다,하지만 너무 "낮은 수준"작업에 사용할 수 있습니다. 그것은 BMP, DIB, JPEG, JPG, JPE, PNG, PBM, PGM, PPM, SR, RAS, TIFF, TIF를 지원합니다.

3

libtiff을 살펴보십시오. 거의 모든 이미지 형식에는 일종의 헤더 데이터가 있으며 파일 형식을 적당하게 유지하기 위해 많은 이미지 형식이 압축됩니다. 헤더를 읽고 압축을 풀 수있는 C 코드를 작성할 수 있지만 다른 누군가가 이미 완료 했으므로 필요 없습니다. 일부 C 이미지 라이브러리의 경우 here을보십시오.

또 다른 질문은 데이터를 조작하려는 형식입니다. 일반적인 선택은 24 비트 RGB입니다 (예 : R, G 및 B는 각각 0에서 255까지 다양 함). MATLAB에서 R, G, B는 0.0에서 1.0까지 두 배로 나타납니다. 또는 다른 색상 공간 (HSV, YUV 등)이 필요할 수 있습니다.

정수 작업이 빠르지 만 더 귀찮은 작업 일 수 있습니다.

+0

+1 OP의 질문에 답할 때도 그렇고 바퀴를 재발 명하지 말 것을 상기시켜야합니다. – JeffH

3

등 파일 libjpeg를 사용 JPEG, 파일 libtiff를 사용 티파니를 조작하려면

또 다른 쉬운 옵션은 많은 이미지 형식의 조작을 할 수 있습니다 gd입니다

(PNG, JPEG, GIF, ...) .

1

다른 유형의 이미지를로드하고 libtiff를로드하는 일부 오픈 소스 라이브러리가 tiff 이미지를로드합니다. 그냥 놀고 싶은데 파일 형식이 그다지 중요하지 않으면 netpbm 형식 (특히 P5와 P6)을 살펴볼 것입니다. 로더와 세이버를 작성하는 것은 꽤 쉽습니다. 물론 좋은 운동입니다. ImageMagick과에서