2013-08-12 3 views
0

C에서 이진 이미지를 만들고 작업하려면 이미지 픽셀에 대해 어떤 데이터 형식을 설정해야합니까? 이진 이미지 픽셀은 단지 두 개의 값을 가지고 있기 때문에 각 픽셀마다 하나의 비트가 필요하다는 가정하에 비트 현명한 C 함수를 사용해야합니다. 이것이 C에서 이진 이미지 처리를 수행하는 올바른 (가장 효율적인) 방법입니까?C에서 이진 이미지 형식

이 경우 이미지 공간을 어떻게 할당 할 수 있습니까? malloc은 내가 실수 한 경우에만 바이트 단위로 공간을 할당합니다.

명확한 설명 : 32 비트 부동 소수점 이미지 (알려진 크기)가 있습니다. 임계 값을 적용하고 임계 값을 바이너리로 저장하여 별도의 구성 요소에 레이블을 지정할 수 있습니다.

+0

이미지가있는 경우 이미 이미지가 있습니까? 기억에 나는 의미한다. 또는, 적어도, 크기를 아십니까? –

+0

예, 이미지가 있습니다. 임계 값을 적용한 결과를 라벨 세그먼트에 바이너리로 저장하려고합니다. – makhlaghi

+0

@RobertHarvey 질문을 다시 열어주세요. astroboy의 설명으로 충분합니다. –

답변

2

픽셀에 액세스 할 때 비트 연산이 필요하기 때문에 픽셀 당 단일 비트를 사용하는 것이 메모리 효율은 가장 높지만 시간 효율은 가장 낮습니다. 이를 수행하려면 malloc((numPixels + 7)/8)이되어야합니다. 즉 할당 크기를 가장 가까운 바이트로 반올림합니다.

으로 이미지를 저장하는 것이 메모리와 공간 고려 사항의 더 나은 균형 일 수 있습니다. 이것은 예를 들어 OpenCV의 임계 값 이미지의 내부 표현입니다.

+0

감사합니다. 효율성으로 내 주요 목표는 시간 효율성이었다. 비트 연산이 바이트 연산보다 빠르다는 생각이 들었습니다. 사실이 아닙니까? – makhlaghi

+0

@astroboy 이미지를 비트로 저장하는 것이 시간적으로 훨씬 효율적입니다. 프로세서는 단일 비트에 대한 명령어를 수행 할 지침이 없기 때문에 비트를 바이트로 변환해야합니다. 두 경우 모두 픽셀을 조작하려면 메모리에서 바이트를 가져와야하지만 (양쪽 모두 같은 시간), 비트의 경우에는 비트 마스크와 비트 쉬프트를 사용하여 픽셀 값을 바이트로 가져와야합니다. –

+0

감사합니다 ;-). – makhlaghi